시작하기 전에 연습 1.1: 자원 가져오기를 완료하십시오.
이 연습에서는 두 포틀렛 API 사이의 개념적 차이점을 학습합니다.
IBM 포틀렛 API는 처음에 WebSphere Portal 버전 4용으로 개발되었습니다. JSR 168 포틀렛 API에 대한 지원은 WebSphere Portal 버전 5.0.2부터 제공되었습니다.
JSR 168 포틀렛 API는 IBM과 Sun이 함께 이끄는 그룹이 주요 포털 서버 벤더로부터 정보를 수집하여 개발한 표준화된 JavaTM 포틀렛 스펙입니다. 그 목적은 여러 벤더의 포털 서버 간의 포틀렛 호환성 문제를 해결하기 위한 것입니다. 초기 스펙은 2003년 10월에 승인되었습니다.
WebSphere Portal은 두 API를 모두 지원합니다. IBM 포틀렛 API 포틀렛(이후로 IBM 포틀렛이라고 함)용 레거시 컨테이너와 JSR 168 포틀렛 API 포틀렛(이후로 JSR 168 포틀렛이라고 함)용 표준 컨테이너와 같은 두 개의 포털 컨테이너를 제공합니다. 서로 다른 컨테이너에서 실행 중인 포틀렛이 동일한 포털 페이지에 상주할 수 있습니다.
포털 컨테이너는 포틀렛용 런타임 환경을 제공합니다. 다음 세 단계로 구성되는 포틀렛 라이프사이클을 지원합니다.
요청 처리 단계에는 다음 두 가지의 하위 단계가 있습니다.
특정 코딩 차이점을 이해하기 전에 두 포틀렛 API 사이의 기본적인 차이점을 이해해야 합니다.
아래에 설명된 대로 포틀렛 전개 설명자의 소스 코드에서 직접 작업할 필요가 없습니다. 포틀렛 전개 설명자 편집기는 portlet.xml에 대한 사용자 인터페이스와 소스 코드에 대한 갱신사항을 자동으로 제공합니다.
포틀렛을 처음 로드할 경우, 포틀렛은 웹 전개 설명자(web.xml)의 매개변수로 초기화됩니다. 매개변수는 <servlet> 요소의 <init-param> 요소에 정의됩니다. 이러한 매개변수는 PortletConfig 오브젝트의 getInitParameter() 메소드를 사용하여 검색할 수 있습니다. 결과 포틀렛은 abstract 포틀렛입니다.
포틀렛을 사용하기 전에, 포틀렛 전개 설명자(portlet.xml)의 매개변수가 PortletApplicationSettings 오브젝트나 PortletSettings 오브젝트로 로드됩니다. 이러한 매개변수는 <concrete-portlet-app> 요소의 <context-param> 요소와 <concrete-portlet> 요소의 <config-param> 요소에서 설정됩니다.
<concrete-portlet-app> 요소의 매개변수는 포틀렛 응용프로그램의 모든 포틀렛에 적용됩니다. 이 매개변수는 PortletSettings.getApplicationSettings() 메소드로 검색할 수 있습니다. getApplicationSettings() 메소드는 PortletApplicationSettings 오브젝트를 리턴하며 PortletApplicationSettings.getAttribute()는 개별 매개변수를 검색하는 데 사용됩니다. <concrete-portlet> 요소의 매개변수는 특정 포틀렛에 적용됩니다. 이 매개변수는 PortletSettings.getAttribute() 메소드로 검색할 수 있습니다.
abstract 포틀렛과 PortletSettings 오브젝트 데이터의 조합을 구체적인 포틀렛이라고 합니다.
포틀렛이 포털 페이지에 놓일 때 PortletData 오브젝트가 작성됩니다. 구체적인 포틀렛과 PortletData 오브젝트의 조합을 구체적인 포틀렛 인스턴스라고 합니다. PortletData 오브젝트는 구체적인 포틀렛 인스턴스의 지속적 데이터를 관리합니다. 값은 PortletRequest.getData() 및 PortletData.getAttribute() 메소드를 사용하여 검색하고 PortletData.setAttribute() 및 PortletData.store() 메소드를 사용하여 저장합니다. 데이터 범위는 포털 페이지의 범위에 따라 사용자 또는 그룹입니다.
구체적 포틀렛 인스턴스와 PortletSession 오브젝트의 조합을 사용자 포틀렛 인스턴스라고 합니다.
다음 그림은 방금 설명한 오브젝트를 표시합니다.
![]() |
JSR 168 포틀렛 API를 사용할 경우, 초기 매개변수는 portlet.xml에서 <portlet-preferences> 요소로 정의됩니다. IBM 포틀렛 API의 web.xml에 있는 <init-param> 요소는 JSR 168 포틀렛 API의 portlet.xml에 있는 <init-param> 요소와 같습니다.
이 초기 매개변수는 읽기 전용으로 설정할 수 있지만, 구성 모드에서 런타임 시 수정할 수 있습니다. 관리자만 읽기 전용 초기화 매개변수를 변경할 수 있습니다. 런타임 중 수정한 경우, 유효성 검증기 클래스가 호출될 수 있습니다. 유효성 검증기 클래스의 이름도 <portlet-preferences> 요소에 설정할 수 있습니다. PortletPreferences 오브젝트는 RenderRequest.getPreferences(), PortletPreferences.getValue() 및 PortletPreferences.getValues() 메소드를 통해 포틀렛이 이 매개변수를 사용할 수 있도록 만듭니다. <portlet-preferences> 요소는 IBM 포틀렛 API의 PortletData 오브젝트와 <config-param> 요소를 합한 것과 같습니다.
PortletPreferences 오브젝트 및 포틀렛 조합을 포틀렛 엔티티라고 합니다. 포틀렛 창은 포틀렛 모드(편집, 보기), 포틀렛 창 상태(일반, 최대화, 최소화) 및 렌더링 매개변수 조합으로 정의됩니다. 포털 페이지에는 지정된 포틀렛에 해당되는 둘 이상의 포틀렛 창이 있을 수 있으며, 각각에는 특정 모드, 상태 및 렌더링 매개변수 세트가 연관됩니다.
다음 그림은 방금 설명한 오브젝트를 표시합니다.
![]() |
두 포틀렛 API 모두 초기화 단계, 요청 처리 단계 및 파기 단계로 구성되는 라이프 사이클을 사용합니다. 요청 처리 단계는 하위 단계인 조치 처리 및 컨텐츠 렌더링으로 나눠집니다. 요청 처리 단계의 세부사항은 요청 처리에 설명되어 있습니다. 각 단계에서 호출하는 특정 메소드가 아래에 나열되어 있습니다.
두 포틀렛 API 모두 2단계 요청 처리를 사용합니다. 조치(이벤트)가 먼저 처리된 후 렌더링 단계가 호출됩니다. IBM 포틀렛 API에서, 조치 단계는 actionPerformed() 메소드를 통해 호출되고 렌더링 단계는 service() 메소드로 호출됩니다. JSR 168 포틀렛 API에서는 processAction() 및 render() 메소드를 통해 단계가 호출됩니다.
두 API 사이의 큰 차이점은 JSR 포틀렛 API가 조치 및 렌더링 단계에서 다른 요청 및 응답 오브젝트를 사용하지만, IBM 포틀렛 API는 두 단계에서 동일 오브젝트를 사용한다는 점입니다. IBM 포틀렛 API를 사용할 경우, 이벤트 처리 동안 요청 및 응답 오브젝트에서 속성을 설정하고 렌더링 단계 동안 값을 검색할 수 있습니다. JSR 포틀렛 API를 사용할 경우, 속성 값은 세션 오브젝트를 사용하거나 렌더링 매개변수를 사용하여 전달할 수 있습니다.
또 다른 차이점은 IBM 포틀렛 API의 actionPerformed() 메소드가 해당되는 ActionEvent 매개변수를 사용하여 PortletRequest 오브젝트에 대한 액세스를 확보한다는 점입니다. JSR 168 포틀렛 API의 processAction() 메소드에는 PortletRequest 및 PortletResponse 인터페이스를 구현하는 ActionRequest 및 ActionResponse 매개변수가 있습니다.
이제 연습 1.3: JavaTM 클래스 차이점 비교를 시작할 수 있습니다.