JSR - 168 Portlet 안내 작성
9653 단어 JavaScript응용 서버jspstrutsweblogic
JSR - 168 은 포트 렛 개발 자 에 게 적합 한 자바 API 집합 이다.규범 에 맞 게 디자인 된 JSR - 168 portlet 의 원인 은 여러 가지 가 있다.이식 성 은 분명 한 장점 이다.규범 에 따라 작 성 된 코드 는 포 털 서버 사이 에서 이동 하기 쉽다.자바 기반 포 털 서버 는 대부분 JSR - 168 portlet 을 지원 합 니 다.
또 다른 장점 은 연합 하기 쉽다 는 것 이다.portlet 이 JSR - 168 규범 에 부합 할 때 웹 서비스 for Remote Portlets (WSRP) 생산 자 를 통 해 JSR - 168 Portlet 을 공개 하 는 것 이 더 쉽다.WSRP 는 웹 서 비 스 를 통 해 portlet 콘 텐 츠 를 결합 하 는 기준 을 제공 했다.JSR - 168 과 WSRP 1.0 portlet 기능 은 긴밀 하 게 결합 되 어 있다.JSR - 168 to WSRP portlet 다 리 는 JSR - 168 의 URL 을 이용 하여 API 를 다시 씁 니 다.본 고 는 이식 성 을 얻 기 위 한 JSR - 168 portlet 개발 을 논술 할 것 이다.
1. 항상 URL 을 이용 하여 API 를 재 작성 하여 Portlet 의 내용 을 얻 습 니 다.
자바 개발 자 들 은 다음 과 같은 JSP 에서 그림 의 URL 을 자주 작성 합 니 다.
<img src="/<%= request.getContextPath()%>/images/logo.gif"/>
이것 은 JSR - 168 portlet 에서 정확 하지 않다.정확 한 방법 은:<img src="<%= renderResponse.encodeURL(renderRequest.getContextPath()+"/images/logo.gif") %>"/>
encodeURL () 방법 은 전체 경로 URI 또는 URL 을 완전히 제한 할 수 있 습 니 다.완전 경로 URI 가 가장 많이 사 용 됩 니 다.JSR - 168 portlet 을 사용 하여 웹 애플 리 케 이 션 아 카 이브 (WAR) 에 자원 을 삽입 할 때 이 기술 을 사용 할 수 있 습 니 다.그림 을 단독 서버 에 설치 할 때 URL 을 완전히 제한 할 수 있 습 니 다.정적 콘 텐 츠 에 서 비 스 를 제공 하 는 캐 시 서버 는 포 털 서버 에서 온 통 신 량 을 제거 하 는 예시 이다.완전히 제 한 된 URL 에 대해 encodeURL () 을 사용 하여 portlet 이외 의 내용 을 참조 할 수 있 지만 클 라 이언 트 를 통 해 자원 에 접근 할 수 없 을 때 만 이렇게 해 야 합 니 다.클 라 이언 트 가 자원 을 직접 탐색 할 수 있다 면 URL 에 encodeURL () 을 사용 할 필요 가 없습니다.예 를 들 어 웹 서버 가 있 으 면 포 털 사용자 가 직접 찾 아 볼 수 없 는 방화벽 안의 정적 내용 을 이 서버 에서 얻 을 수 있 으 면 encodeURL () 을 호출 해 야 합 니 다.이 내용 이 방화벽 밖 에 있 고 포 털 사용자 가 웹 서버 를 직접 조회 할 수 있다 면 encodeURL () 을 호출 할 필요 가 없다.2. 재 작성 URL 에 경 로 를 추가 하지 마 십시오.
RenderRequest 에 들 어 오 는 encodeUrl () 방법의 URL 은 이 방법 을 호출 하기 전에 완전 해 야 합 니 다.이 방법 을 호출 한 후 URL 의 일부분 을 추가 할 수 없습니다.예 를 들 어 XSLT 변환 에서 URL 변환 을 생 성 하려 면 인 코딩 된 기본 URL (http://foo.com/) 매개 변수 로 전달 하고 인 코딩 된 기본 URL 에 경로 (pages / bar. jsp) 를 추가 합 니 다.
다음 호출 은 URL 을 그림 에 인 코딩 하 는 정확 한 방법 을 보 여 줍 니 다.
<@= renderResponse.encodeURL(renderRequest.getContextPath()+"/images/logo.gif")@>
이것 은. portal 파일 을 사용 하여 BEA WebLogic Portal 9. 2 에서 다음 과 같은 HTML 세 션 을 생 성 합 니 다.<img src="http://localhost:7001/PortalWebApp/images/logo.gif;PORTAL_TAU=W3f6FbmLLcgZq9Fpv1JHLs5rrJG8Lgj2nnDVJqdfShhRGFnsqCKZ!-545815275"/>
아래 호출 은 정확 하지 않다.URL 은 원 하 는 자원 을 가리 키 지 않 습 니 다.<@= renderResponse.encodeURL(renderRequest.getContextPath()+ "/images/")+"logo.gif"@>
이것 은. portal 파일 을 사용 하여 WebLogic Portal 9. 2 에서 다음 과 같은 HTML 파일 을 생 성 합 니 다.<img src="http://localhost:7001/PortalWebApp/images/;
PORTAL_TAU=W3f6FbmLLcgZq9Fpv1JHLs5rrJG8Lgj2nnDVJqdfShhRGFnsqCKZ!-545815275logo.gif"/>
3. 이름 공간 을 사용 하여 클 라 이언 트 스 크 립 트 변수 와 방법 을 제한 합 니 다.portlet 의 자바 스 크 립 트 를 사용 하여 사용자 의 입력 을 검증 하고 싶다 고 가정 합 니 다.다음 JavaScript 기능 이 유용 할 수 있 습 니 다.
<script>function validate(foo) { if (foo.bar.value=="") { return false; } return true;}</script>
같은 페이지 의 다른 portlet 에 도 vaidate () 라 는 논리 적 인 자바 스 크 립 트 방법 이 있 을 수 있 습 니 다.포 털 프레임 워 크 자체 가 자 바스 크 립 트 방법 을 사용 할 수 있 습 니 다.이 문제 의 해결 방법 은 클 라 이언 트 스 크 립 트 의 이름 공간 방법 과 최상 위 변 수 를 사용 하 는 것 입 니 다. <%@taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
스 크 립 트 의 vaidate () 방법 은 표 시 를 구분 할 수 있 습 니 다.<script>function validate<portlet:namespace/>(foo) { if (foo.bar.value=="") { return false; } return true;}</script>
다음은 이름 공간 이 있 는 자 바스 크 립 트 를 호출 하 는 방법 입 니 다.<form action="http://www.somesite.org/servlet"method="GET" onsubmit="return validate<portlet:namespace/>(this);"><label for="bar">Text(required): </label><input type="text" name="bar" id="bar"></form>
4. Portlet 자원 을 참조 하 는 내 연 클 라 이언 트 스 크 립 트 가 규범 에 부합 되 는 지 확인 합 니 다.클 라 이언 트 스 크 립 트 는 항상 외부 자원 (예 를 들 어 이미지, 영화, 외부 페이지) 을 인용 하여 사용자 인터페이스 를 강화 합 니 다.일반적인 예 는 그림 을 교환 하 는 데 더 효과 적 인 자 바스 크 립 트 를 위해 그림 을 미리 불 러 오 는 것 입 니 다.다음은 하나의 예시 이다.
<script>function preloadImages(){ var menuImage = new Image(); menuImage.src = "images/icon.gif"; var menuImageDark=new Image(); menuImageDark.src = "images/icon.gif";}</script>
클 라 이언 트 스 크 립 트 의 URL 은 JSR - 168 규범 에 따라 다시 써 야 합 니 다.이 스 크 립 트 들 은 API 를 다시 쓰 는 URL 을 호출 하기 위해 JSP 나 JSP - 168 portlet 클래스 에 있어 야 합 니 다.그것들 은 단독 자 바스 크 립 트 (. js) 파일 에 있 을 수 없습니다.다음은 URL 재 작성 을 포함 하 는 적당 한 이름 공간 스 크 립 트 가 JSR - 168 portlet 에서 보 이 는 모습 입 니 다.<script>function <portlet:namespace/>preloadImages(){ var menuImage = new Image(); menuImage.src = "<%=renderResponse.encodeURL(renderRequest.getContextPath()+ "images/icon.gif")%>"; var menuImageDark= new Image(); menuImageDark.src = "<%=renderResponse.encodeURL(renderRequest.getContextPath()+ "images/icon_dark.gif") %>";}</script>
5. 항상 portlet 응답 성명 의 내용 형식JSR - 168 규범 에 따 르 면 "portlet 는 RenderResponse 인터페이스의 setContentType 방법 으로 응답 하 는 콘 텐 츠 유형 을 설정 해 야 합 니 다".콘 텐 츠 형식 을 명시 적 으로 설정 하지 않 은 portlet 는 컴 파일 에 성공 할 것 입 니 다.그러나 WebLogic Portal 은 콘 텐 츠 종 류 를 설정 하지 않 은 portlet 를 실행 하지 않 습 니 다.portlet 에서 콘 텐 츠 형식 을 설정 하 였 는 지 확인 하 십시오.
다음 예제 에 서 는 내용 형식 을 정확하게 설정 한 portlet 를 보 여 줍 니 다.
public class MyPortlet extends GenericPortlet { public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.println("I set my content type!
"); }}
이 예 는 정확 하지 않 지만 컴 파일 을 받 을 수 있 습 니 다:public class MyPortlet extends GenericPortlet { public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { // no content type set! PrintWriter writer = response.getWriter(); writer.println("I did NOT set my content type!
"); }}
6. Portlet 에서 쿠키 를 보 내지 마 세 요.JSR - 168 portlet 규범 에 따라 HttpServletResponse 에서 addCookie () 를 호출 하면 쿠키 를 설정 하지 않 습 니 다.쿠키 를 설정 할 수 있 는 portlet 용기 가 깨 졌 습 니 다.이 방법 을 사용 하지 마 세 요.
사용자 가 포 털 을 사용 할 때 모든 사용자 가 정 보 를 지속 적 으로 저장 하 는 것 을 좋아한다 면 정 보 를 portlet 세 션 의 속성 으로 저장 할 수 있 습 니 다.사용자 가 종료 한 후에 정 보 를 영구적 으로 저장 하 는 것 을 좋아한다 면 정 보 를 데이터 저장 소 (파일 시스템, 데이터베이스, LDAP 등) 에 저장 할 수 있 습 니 다.
7. 업무 논 리 를 표현 에서 분리 한다.
경험 이 있 는 개발 자 들 은 모델 뷰 어 컨트롤 러 프레임 워 크 가 Struts 나 Beehive 와 유사 하여 부 웹 애플 리 케 이 션 개발 을 더욱 쉽게 할 수 있다 는 것 을 잘 알 고 있다.이것 도 역시 portlet 에 적용 된다.JSR - 168 은 플랫폼 독립 portlet 에 적용 되 는 유일한 이상 적 인 규범 이 아니다.WSRP portlet 은 표준 을 실현 하 는 포 털 (비 자바 포 털 포함) 간 이동 이 편리 하 다.WebLogic Portal 은 WSRP 를 통 해 Beehive 와 Struts portlet 을 공개 할 수 있다.
만약 portlet 를 JSR - 168 WAR 로 배치 해 야 한다 면, 당신 은 여전히 선택 이 있 습 니 다.JSR - 168 portlet 의 표현 논리 에서 비 즈 니스 논 리 를 분리 하 는 가장 쉬 운 방법 은 자바 서버 페이지 (JSP) 를 할당 하 는 것 이다.portlet 처리 표현 방법 (예 를 들 어 render () 과 doView () 의 업무 논리.portlet 는 응용 프로그램 급 역할 영역 이나 portlet 역할 영역 을 사용 하여 JSP 에 정 보 를 전달 합 니 다.다음 예제 에 서 는 portlet 요청 을 JSP 에 할당 하고 portlet 역할 영역 에 있 는 문자열 을 전달 합 니 다.
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); request.setAttribute("foo","bar"); String jsp = "/pages/portal.jsp"; PortletContext ctx = getPortletContext(); PortletRequestDispatcher dispatcher = ctx.getRequestDispatcher(jsp); dispatcher.include(request, response);}
JSP (위 예제 의 jsp) 에 도착 하 는 경로 값 은 portlet 의 웹 압축 파일 (WAR) 의 컨 텍스트 경 로 를 포함 하지 않 습 니 다.JSR - 168 의 할당 방법 은 업무 논리 와 표 시 를 분리 할 수 있다.그러나 MVC 프레임 의 성숙 도가 부족 하 다.
JSR - 168 개발 에 적용 되 는 프레임 워 크 는 다음 과 같 습 니 다.
종결 어
이러한 지도 원칙 을 준수 하면 당신 의 portlet 이 JSR - 168 규범 에 부합 하도록 할 것 입 니 다.규범 을 지 키 면 portlet 이 자바 포 털 서버 에서 이동 하 는 것 이 쉬 워 집 니 다.WSRP 연합 포 털 콘 텐 츠 활용 도 용이 해진 다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.