화면 구성 요소의 코드 중복 문제를 없앨 때 사용 (모듈화)
url 변화 없이 sub.jsp의 출력 내용만 화면에 포함되게 된다.
main.jsp
flush 속성
- true : 지정한 jsp 페이지를 실행하기 전에 출력 버퍼를 플러시, 즉 비워냄
=> 응답 상태 및 응답 헤더가 전송됨(http 프로토콜의 구조상 응답 상태 코드와 함께 헤더 정보를 가장 먼저 웹 브라우저에 전송함)
=> 즉, sub.jsp에서 response.setHeader()를 통해 헤더 값을 수정할 수 없음- false : 플러시 하지 않음
sub.jsp
결과 페이지
서로 다른 2개의 클래스로 컴파일이 된다.
※ 컴파일된 main.jsp 코드
includer.jsp
includee.jspf
결과 페이지
코드를 삽입시킨 결과가 자바코드로 작성되어 컴파일된다.
※ 컴파일된 includer.jsp 코드
코드가 포함되어 컴파일됨을 알 수 있다.
include 디렉티브, forward 액션 태그는 요청의 흐름이 다른 페이지로 이동한 것이기 때문에 변수를 공유할 수 없다. 따라서 <jsp:param> 액션태그를 자식 태그로 추가하면, 변수를 공유할 수 있다.
<jsp:include page="/module/top.jsp" flush="false"> <jsp:param name="param1" value="value1"/> <jsp:param name="param2" value="value2"/> </jsp:include>
만약, 이미 동일한 이름의 파라미터가 존재하는 상황에서 같은 이름의 파라미터를 주게 되면, includer 파일에서는 기존의 파라미터 값과 함께 새로운 파라미터 값이 추가되게 된다. 이때 새롭게 추가된 파라미터 값이 우선한다.
<jsp-config> <jsp-property-group> <url-pattern>/view/*</url-pattern> <include-prelude>/common/variable.jspf</include-prelude> <include-coda>/common/footer.jspf</include-coda> </jsp-property-group> </jsp-config>
※ 주의점
<jsp:forward> 액션 태그가 올바르게 동작하기 위해서는 이를 실행하기 전에 웹 브라우저에 데이터가 전송되면 안된다. 즉, 출력 버퍼를 플러시하면 안된다.
page 디렉티브의 buffer 속성을 none으로 해서 버퍼를 사용하지 않는 경우에도 제대로 동작하지 않는다.
from.jsp
to.jsp
결과 페이지
서로 다른 2개의 클래스로 컴파일이 된다.
※ 컴파일된 from.jsp 코드
요청의 흐름이 이동된다. => url 동일, 페이지 내용만 요청의 흐름이 이동된 페이지
vs 페이지 이동
: 새로운 요청이 일어나는 것으로 요청의 흐름이 유지되지 않는다.
- response.sendRedirect(" ")
- location.href = " "
기타 메모 .....
include
jsp-jsp 인증처리, 공통코드추가-모듈화 ○
jsp-servlet 가입, 등록 ×
servlet-jsp select조회 ×
forward 액션 태그
jsp-jsp × 모델1(jsp가 로직까지..)
jsp-servlet × 잘... 안씀....
servlet-jsp(뷰) select 조회할 때 forward...? => setAttribute
파람액션태그...는 거의 잘 안쓰고
굳이 a.jsp 파일에서 사용하는 변수를 b.jsp로 넘기고 싶을 때...