연습 1.4: 전개 설명자 차이점 비교

시작하기 전에 연습 1.3: Java 클래스 차이점 비교를 완료하십시오.

이 연습에서는 두 포틀렛 API에 대한 전개 설명자 사이의 차이점을 학습합니다. 포틀렛 전개 설명자(portlet.xml)의 두 버전을 조사하십시오. 샘플에서 볼 수 있는 기본 차이점은 다음과 같습니다. 포틀렛 전개 설명자를 편집하려면 포틀렛 전개 설명자 편집기를 사용하십시오.

portlet.xml의 태그 규칙

IBM 포틀렛 API의 태그 규칙은 DTD로 정의되고, JSR 168 포틀렛 API의 태그 규칙은 XML 스키마로 정의됩니다. 이로서, 포틀렛 전개 설명자의 맨 위에 서로 다른 XML 정의문이 있어야 합니다.

IBM 포틀렛 API
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
          "portlet_1.1.dtd ">
JSR 168 포틀렛 API
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             version="1.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             id="bookmark_03_jsr.1">

<portlet-app> 요소의 id 속성

두 API는 <portlet-app> 요소의 id 속성에 대해 서로 다른 이름을 사용합니다. IBM 포틀렛 API는 uid를 사용하는 반면 JSR 168 포틀렛 API는 id를 사용합니다.

IBM 포틀렛 API
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
JSR 168 포틀렛 API
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             version="1.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             id="bookmark_03_jsr.1">

<portlet> 요소의 href 속성

IBM 포틀렛 API를 사용할 경우, <portlet> 요소의 href 속성은 웹 전개 설명자(web.xml)에서 <servlet> 요소의 해당 id를 지시해야 합니다. JSR 168 포틀렛 API를 사용할 경우에는 <portlet-app> 요소의 id 속성이 서버에 대해 포틀렛을 고유하게 식별합니다. JSR 168 포틀렛은 servlet이 아니며 web.xml을 참조할 필요가 없습니다.

IBM 포틀렛 API
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml:     <servlet id="Servlet_1086938566718">
JSR 168 포틀렛 API
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             version="1.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             id="bookmark_03_jsr.1">

포틀렛 버전

IBM 포틀렛 API의 경우 <portlet-app> 및 <portlet> 요소의 major-version 및 minor-version 요소를 사용하고, JSR 168 포틀렛 API의 경우에는 <portlet-app> 요소의 version 속성을 사용하십시오.

IBM 포틀렛 API
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
             major-version="1" minor-version="0">
<portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
             major-version="1" minor-version="0">
JSR 168 포틀렛 API
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             version="1.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             id="bookmark_03_jsr.1">

지원되는 마크업 유형

포틀렛 전개 설명자에서, IBM 포틀렛 API는 지원되는 마크업 유형을 선언하는 반면 JSR 168 포틀렛 API는 지원되는 MIME 유형을 선언합니다. IBM은 JSR 168 포틀렛에 대해 지원되는 마크업 유형을 정의할 수 있는 확장자, wps.markup 초기화 매개변수를 제공합니다. 이는 동일 MIME 유형을 사용하는 마크업 유형(예: HTML 및 cHTML)을 구별하기 위해 사용됩니다.

IBM 포틀렛 API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
   <markup name="chtml">
      <view />
   </markup>
</supports>
JSR 168 포틀렛 API
<init-param>
   <name>wps.markup</name>
   <value>html,chtml</value>
</init-param>

<supports>
   <mime-type>text/html</mime-type>
   <portlet-mode>VIEW</portlet-mode>
   <portlet-mode>EDIT</portlet-mode>
</supports>

지원 모드

지원되는 모드는 구문이 약간 다르긴 하지만 두 API 모두에 대해 포틀렛 전개 설명자에서 정의해야 합니다. 두 API는 모두 편집, 보기 및 도움말 모드를 지원합니다. IBM 포틀렛 API는 구성 모드도 지원합니다. JSR 168 포틀렛 API는 제품 정보, 미리보기, 인쇄, 편집(기본값) 및 구성과 같은 사용자 정의 모드를 지원합니다. 두 API 모두에 대해, 보기 모드는 필수이고 다른 모든 모드는 선택사항입니다.

IBM 포틀렛 API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
</supports>
JSR 168 포틀렛 API
<supports>
   <portlet-mode>VIEW</portlet-mode>
   <portlet-mode>EDIT</portlet-mode>
</supports>

허용 가능한 창 상태

두 API 모두에 대해 자동으로 일반 상태가 제공됩니다. IBM 포틀렛 API의 경우, solo와 같은 다른 상태를 명시적으로 선언해야 합니다. JSR 168 포틀렛 API의 경우에는 최대화 및 최소화 상태도 자동으로 제공됩니다. 사용자 정의 상태는 명시적으로 선언해야 합니다.

IBM 포틀렛 API
<allows>
   <maximized/>
   <minimized/>
</allows>
JSR 168 포틀렛 API
예제에는 사용자 정의 상태가 표시되어 있지 않지만, <custom-window-state> 요소를 사용할 수 있습니다.

로컬화

포틀렛을 정의하는 로컬화된 일부 문자열은 포틀렛 전개 설명자에서 정의됩니다. IBM 포틀렛 API의 portlet.xml은 제목, 간단한 제목, 설명 및 키워드에 대한 로컬화된 값을 정의합니다. IBM API에는 기본 로케일에 대한 설정도 있습니다. JSR 168 포틀렛 API는 포틀렛 설명에 대한 로컬화된 값을 정의하고 portlet.xml에 이름을 표시합니다. 제목, 간단한 제목 및 키워드의 값은 포틀렛 자원 번들에 위치합니다. 아래에 표시된 것처럼, 포틀렛 자원 번들 Portlet.properties는 샘플의 nls 디렉토리에 위치합니다. JSR 168 API에는 자원 번들 및 지원되는 로케일을 정의하는 설정이 있습니다.
IBM 포틀렛 API
<default-locale>en</default-locale>
<language locale="en">
   <title>Bookmark portlet (IBM)</title>
   <title-short>Bookmark</title-short>
   <keywords>Bookmark</keywords>
</language>
<language locale="de">
   <title>Lesezeichen Portlet (IBM)</title>
   <title-short>Lesezeichen</title-short>
   <keywords>Lesezeichen, Bookmark</keywords>
</language>
JSR 168 포틀렛 API
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<description xml:lang="EN">English description</description>
<display-name xml:lang="EN">English display name</display>-name>
<description xml:lang="DE">German description</description>
<display-name xml:lang="DE">German display name</display>-name>

샘플 포틀렛 자원 번들, Portlet.properties:
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark

캐시 만기

IBM 포틀렛 API에서, 포틀렛은 PortletRequest 오브젝트의 invalidateCache() 메소드를 사용하여 캐시(invalidation-based caching)를 무효화할 수 있습니다. 기본 캐시 만기 및 범위는 포틀렛 전개 설명자에 설정됩니다. <expires> 요소의 값은 0(항상 만기), -1(만기 안됨) 또는 만기 이전 시간(초)이 될 수 있습니다. <shared> 요소 값 no는 캐시가 포틀렛 인스턴스 사이에 공유되지 않음을 의미합니다.

JSR 포틀렛 API는 캐시 만기 시간이 전개 설명자에 정의되는 만기 기반 캐싱을 사용하지만, 포틀렛은 RenderResponse 오브젝트의 setAttribute() 메소드에서 EXPIRATION_CACHE 값을 사용하여 값을 재설정할 수 있습니다. <expiration-cache> 요소는 IBM 포틀렛 API가 <expires> 요소에 사용하는 것과 같은 값을 사용합니다.

IBM 포틀렛 API
<cache>
   <expires>-1</expires>
   <shared>no</shared>
</cache>
JSR 168 포틀렛 API
<expiration-cache>0</expiration-cache>

이제 연습 1.5: JSP 파일 코딩 차이점 비교를 시작할 수 있습니다.

사용 조건 | 피드백
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.