포틀릿 및 포털 작업을 요청 받았습니다.
포틀릿과 서블릿의 차이점을 알고 싶습니다.
포틀릿이 서블릿과 어떻게 / 어디에서 다릅니 까 (기능적으로)?
답변:
포틀릿은 포털 컨테이너 및 구성 요소를 규제하는 JSR-168 표준의 일부입니다. 이것은 웹 컨테이너 (및 서블릿)의 표준과는 다릅니다. 이 두 표준 사이에는 확실히 강력한 유사점이 있지만 컨테이너, API, 수명주기, 구성, 배포 등이 다릅니다.
- 포틀릿 대 서블릿의 주요 차이점은 서블릿이 항상 단일 작업의 유형에 응답하는 동안 일 수 있었다 요청 : 포틀릿 (인해 수명주기의 성격과 강한 용기 바인딩에) 행동의 두 가지 유형에 응답 할 수있다 렌더링 및 요청 . 물론 더 많은 것이 있지만 포털 개발을 공부할 때 두 가지의 핵심 차이점으로 생각했습니다.
소스에서 향상된 기능 : 서블릿 대 포틀릿
유사점
서블릿 및 포틀릿은 구현을 위해 Java를 사용하는 웹 기반 구성 요소입니다.
포틀릿은 서블릿 컨테이너가 서블릿 컨테이너에서 관리하는 것처럼 포틀릿 컨테이너에서 관리합니다.
포틀릿 및 서블릿에서 정적 및 동적 컨텐츠를 모두 생성 할 수 있습니다.
포틀릿 및 서블릿의 수명주기는 컨테이너에 의해 제어됩니다.
클라이언트 / 서버 모델은 서블릿과 포틀릿 모두에 사용됩니다.
패키징과 배포는 본질적으로 동일합니다. WAR / EAR입니다.
애플리케이션 세션은 서블릿 및 포틀릿 컨테이너에 모두 존재합니다. 이는 포틀릿 컨테이너의 렌더링 단계에서 작업 단계 (또는 하위 단계)까지 데이터를 공유하는 (원유 한 포틀릿 간 통신) 방법 중 하나입니다.
서블릿과 포틀릿은 모두이를 지원하는 유사한 서버 / VM 환경을 사용합니다. 그러나 포틀릿의 경우 일부 추가 구성이 필요할 수 있습니다.
빌드 / DI 도구는 둘 다 비슷합니다. Ant, Maven, Gradle 등이 모두 지원됩니다. 대부분 :)-이것은 Liferay 7에서 약간 변경되었습니다.
차이점
서블릿은 완전한 웹 페이지를 렌더링 할 수있는 반면 포틀릿은 html 조각을 렌더링합니다. 이러한 조각은 포털에서 완전한 웹 페이지로 집계됩니다.
JSR 168 포틀릿의 컨텐츠 유형은 cHTML, XHTML, WML 만 될 수 있습니다. 다른 콘텐츠 유형은 지원하지 않습니다.
포틀릿은 body, frame, frameset, head, html 또는 title과 같은 태그를 포함하는 HTML 코드를 생성 할 수 없습니다.
서블릿과 달리 포틀릿에는 URL이 첨부되어 있지 않으므로 직접 액세스 할 수 없습니다. 액세스는 포틀릿이있는 포털 페이지를 통해서만 가능합니다.
포틀릿은 창 상태 또는 포틀릿 모드를 조작하는 컨트롤과 함께 제공 될 수 있습니다.
단일 포틀릿의 여러 인스턴스를 동일한 페이지에 배치 할 수 있습니다.
포틀릿은 지속적인 구성 및 사용자 정의, 프로필 정보를 지원합니다.
포틀릿에는 두 가지 유형의 요청 즉, 렌더링 요청 및 작업 요청.
포틀릿에는 세션 내에 두 가지 범위가 있습니다. 포틀릿 간 통신을위한 애플리케이션 범위 및 포틀릿 내 통신을위한 포틀릿 범위.
포틀릿은 응답의 문자 세트 인코딩을 설정할 수 없으며 HTTP 응답 헤더를 설정할 수도 없습니다.
포틀릿은 요청 URL에 액세스 할 수 없습니다. 따라서 URL에 추가 된 쿼리 매개 변수에 액세스 할 수 없습니다. 포틀릿은 쿠키를 설정할 수 없습니다.
포틀릿 API의 일반적인 방법은
doView()
,doEdit()
,doHelp()
및processAction()
서블릿의 사람들은 동안service()
,doPost()
,doGet()
.서블릿 사양 -JSR 369 (Servlet 4.0), JSR 340 (Servlet 3.1), JSR 315 (Servlet 3.0), JSR 154 (Servlet 2.5 & 2.4). Portlet 사양 -JSR 168 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)
포틀릿 배포 에는 Servlet 애플리케이션 과 다른 접근 방식 이 포함됩니다 . 일부 공급자 (Liferay / Alfresco / WebSphere)는 OSGi와 같은 특수 라이브러리를 사용하여 애플리케이션을 모듈화하지 않고 서블릿의 경우 불가능한 서버를 다시 시작할 필요없이 포틀릿의 핫 배포를 지원합니다.
편집 (댓글에서)
포틀릿 컨테이너는 서블릿 컨테이너에 빌드됩니다. 따라서 궁극적으로 포틀릿은 서블릿 컨테이너에서 실행된다고 말할 수 있습니다. 그러나 앱을 개발하는 동안 Servlet / Java EE 컨테이너와는 별도로 포틀릿 컨테이너를 봅니다.
포틀릿과 서블릿은 모두 http 요청을 수신하고 일반적으로 브라우저에서 렌더링 할 수있는 일부 HTML 인 응답을 반환합니다. 포틀릿은 "포털"의 컨텍스트에서 사용되며, 사용자가 보는 단일 페이지에는 서로 다른 포틀릿에서 가져온 많은 부분, 생각 타일이 있습니다.
이제 일반 서비스에서 "바둑판 식"효과를 얻을 수 있습니다 (방법에 대한 예는 Struts + Tiles 참조). 포틀릿의 추가 비트는 포틀릿이 포털에서 제공하는 더 풍부한 환경에 있다는 것입니다. 추가 API가 제공되므로 포틀릿에 표시되는 내용은 개별 사용자가 기본 설정에 맞게 구성 할 수 있으며, 포틀릿은 서로 통신 할 수 있습니다. 하나의 버튼을 누르면 다른 작업이 발생합니다.
기본적으로 서블릿은 일반적으로 브라우저에서 전체 페이지를 차지하는 콘텐츠를 제공하고 (프레임을 사용하지 않는 경우) 포틀릿은 창으로 래핑 된 콘텐츠를 제공합니다. 포틀릿을 사용하면 여러 포틀릿이 나란히있을 수 있으며 각 포틀릿은 서로 다른 컨텐츠와 기능을 제공 할 수 있습니다. 포틀릿은 한 유형의 애플리케이션에 대한 완전한 상호 작용을 제공 할 수 있고 다른 포틀릿은 다른 유형의 애플리케이션에 대한 컨텐츠를 제공 할 수 있습니다. 포털은 페이지의 모든 포틀릿에 대해 일부 하우스 키핑 기능과 보안 된 단일 진입 점을 제공 할 수 있습니다. 그들 사이의 세부 사항 (유사성 / 차이점)에 대해서는 계속 읽으십시오. 다음은 몇 가지 유사점입니다.