시작하기 전에 연습 1.3: Java 클래스 차이점 비교를 완료하십시오.
이 연습에서는 두 포틀렛 API에 대한 배치 설명자 사이의 차이점을 학습합니다. 포틀렛 배치 설명자(portlet.xml)의 두 버전을 조사하십시오. 샘플에서 볼 수 있는 기본 차이점은 다음과 같습니다. 포틀렛 배치 설명자를 편집하려면 포틀렛 배치 설명자 편집기를 사용하십시오.
IBM 포틀렛 API의 태그 규칙은 DTD로 정의되고, JSR 168 포틀렛 API의 태그 규칙은 XML 스키마로 정의됩니다. 이로서, 포틀렛 배치 설명자의 맨 위에 서로 다른 XML 정의문이 있어야 합니다.
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
"portlet_1.1.dtd ">
<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">
두 API는 <portlet-app> 요소의 id 속성에 대해 서로 다른 이름을 사용합니다. IBM 포틀렛 API는 uid를 사용하는 반면 JSR 168 포틀렛 API는 id를 사용합니다.
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
<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> 요소의 href 속성은 웹 배치 설명자(web.xml)에서 <servlet> 요소의 해당 id를 지시해야 합니다. JSR 168 포틀렛 API를 사용할 경우에는 <portlet-app> 요소의 id 속성이 서버에 대해 포틀렛을 고유하게 식별합니다. JSR 168 포틀렛은 servlet이 아니며 web.xml을 참조할 필요가 없습니다.
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml: <servlet id="Servlet_1086938566718">
<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 속성을 사용하십시오.
<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">
<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)을 구별하기 위해 사용됩니다.
<supports>
<markup name="html">
<view />
<edit />
</markup>
<markup name="chtml">
<view />
</markup>
</supports>
<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 모두에 대해, 보기 모드는 필수이고 다른 모든 모드는 선택사항입니다.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
두 API 모두에 대해 자동으로 일반 상태가 제공됩니다. IBM 포틀렛 API의 경우, solo와 같은 다른 상태를 명시적으로 선언해야 합니다. JSR 168 포틀렛 API의 경우에는 최대화 및 최소화 상태도 자동으로 제공됩니다. 사용자 정의 상태는 명시적으로 선언해야 합니다.
<allows>
<maximized/>
<minimized/>
</allows>
Portlet.properties
는 샘플의 nls
디렉토리에
위치합니다.
JSR 168 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>
<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>
Sample portlet resource bundle, 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> 요소에 사용하는 것과 같은 값을 사용합니다.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
이제 연습 1.5: JSP 파일 코딩 차이점 비교를 시작할 수 있습니다.