■ 다음 두 가지 include 메커니즘을 사용하여 재사용 가능한 컴포넌트를 구축할 수 있다.
지시자 : <%@ include file="aaa.jsp" %>
표준 액션 : <jsp:include page="aaa.jsp" />
■ include 지시자는 전환할때 (jsp → java ) 에 포함 작업을 한다. 그것도 딱 한 번만.
따라서, include 지시자는 배포된 다음 거의 수정을 하지 않는 컨텐츠에 적합한 메커니즘
이다.
■ include 지시자는 포함할 파일 내용 전부를 복사하여 해당 위치에 붙여 넣는다.
컨테이너는 이 파일을 합쳐 하나로 만든 다음 컴파일하고 서블릿 코드를 생성한다.
Runtime 시에, include 지시자를 가진 페이지는 두 파일을 합쳐 하나로 만든 jsp 와 동일하게
작동한다.
■ <jsp:include> 표준 액션은 Runtime 시에 포함될 페이지 응답을 원본 페이지에 포함한다.
따라서, <jsp:include> 표준 액션은 배포되고 난 다음에도 수정이 되는 컨텐츠에 적합하다.
■ 두 메커니즘 모두 동적인 컨텐츠를 포함 할 수 있다. 예를 들면, EL 표현식이 있는 JSP 를
포함할 수 있다.
■ include 지시자는 여러 지시자 중 코딩 위치에 민감한 유일한 지시자이다. include 지시자가
있는 바로 그 위치에 컨텐츠가 포함되기 때문이다.
■ include 지시자 속성과 <jsp:include> 표준 액션의 속성은 그 이름이 다르다.
지시자 : <%@ include file="aaa.jsp" %>
표준 액션 : <jsp:include page="aaa.jsp" />
■ 재사용 가능한 컴포넌트로 만들려면, 시작, 마침 태그를 제거해야 한다. 모든 브라우져가
중간에 들어간 <html><body> ....</body></html> 등의 마침 태그를 제대로 출력하는
것은 아니기 때문이다. 재사용 가능한 컴포넌트는 다른 컴포넌트에 포함/삽입된다는 것을
늘 염두에 두고 설계, 구현해야만 한다.
■ <jsp:include> 표준 액션의 body 에 <jsp:param> 태그를 사용하여 요청 파라미터를
설정(또는 대체) 할 수 있다.
■ <jsp:forward> 의 몸체에도 <jsp:param> 태그의 사용이 가능하다.
■ <jsp:param> 태그는 <jsp:include> 와 <jsp:foward> 태그 내에서만 의미가 있다.
■ <jsp:param> 파라미터가 요청 파라미터에 있는 것이라면 이전 값을 덮어쓰고(overwrite),
그렇지 않으면 요청에 새로운 파라미터를 생성한다.
(예를 들어..)
원 페이지에 있는 A=foo 라는 파라미터가 있고, 몸체에서 A=bar 라는 파라미터를 추가했다면
포함된 페이지에서 A 에는 bar 가 들어가 있다. 새로운 것이 항상 우선이다.
그리고, 추가한 파라미터의 생존범위는 include 페이지로, 이 안에서만 유효하다.
즉, 포함한 페이지에서는 항상 A=foo 이다.
■ 포함될 자원은 다음과 같은 제한이 있다.
포함될 자원에는 응답 상태코드(Response Status Code)를 변경할 수 없으며,
헤더(header)를 설정할 수 없다.
■ <jsp:forward> 표준 액션은 동일 web application 에 있는 다른 자원으로 요청을 넘긴다.
(RequestDispatcher 처럼... )
■ 포워딩 작업 직전, 응답 버퍼의 내용을 먼저 지우게 된다.
따라서, 응답을 넘겨받은 자원은 아주 깨끗한 상태에서 출력 스트림 작업을 하게 된다.
포워딩 전에 쓰여진 내용이 혹시라도 있다면 모두 버려진다(clearing 된다) 는 것을
항상 염두에 두고 있어야 한다.
■ 포워딩 전에 응답을 보냈다면... (예를 들어, out.flush() 를 호출했다면..)
클라이언트는 out.flush() 를 통해서 내보내진 등답을 받지만, forwarding 된 응답을
받지 못한다. 물론, out.flush() 이후에 출력 스트림에 기록된 내용도 받지 못한다.
'프로그래밍 > JAVA, Servlet, JSP' 카테고리의 다른 글
특정 클래스의 메소드를 실행(공통함수용) (0) | 2011.07.01 |
---|---|
The type Collection is not generic; it cannot be parameterized with arguments <? extends E> (0) | 2011.01.05 |
java file 하위 디렉토리, 파일 모두삭제 (0) | 2010.12.23 |
java map 전체출력(Iterator 사용) (1) | 2010.12.21 |
tomcat에서 port추가 (0) | 2010.12.20 |