[JSP] 액션태그 (forward, include, param)
<jsp:include> 액션 태그
다른 JSP페이지의 실행 결과를 현재 페이지에 삽입시킨다.
<jsp:include page="[삽입할 페이지.jsp]" flush="[버퍼출력방식]"/>
flush는 잘 사용하지 않으며 false가 기본 값이다.
jsp 페이지 A와 B를 만들고 A페이지에 B를 삽입해보자.
페이지A
<body>
페이지 A 출력<br/>
<jsp:include page="b.jsp"/>
</body>
페이지B
<body>
페이지 B 출력<br/>
</body>
페이지 A 실행결과
include 태그를 이용하여 페이지의 머리글, 바닥글, 사이드메뉴, 글 페이지 등 여러 페이지를 구성시킬 수 있다.
<%@ include page="b.jsp %>
위 코드의 <%@ 지시자 구문과 같은 페이지를 삽입하는 역할을 한다.
<jsp:include> 특성
1. 클라이언트 측의 include
2. 동적 페이지 할당이 가능하다.
3. get방식으로 파라미터 전달할 수 없다
(동적인 페이지 작성시 사용)
4. 포함되는 문서 (b.jsp)서블릿이 따로 만들어져서 a.jsp에 삽입
<%@ include%> 특성
1. 서버측의 include (소스 실행 전 이미 include됨)
2. 동적 할당 불가능
3. 소스 실행전 포함되므로 변수를 같이 사용할 수 있음
(정적인 페이지 작성시 사용)
4. a.jsp 내부에 b.jsp가 포함된 상태로 서블릿이 만들어짐
인자를 전달해야 한다면 <%@ include%> 를 사용
아무런 인자도 전달할 필요가 없다면 <jsp:include>를 사용한다.
<jsp:include>로 인자를 넘기고 싶다면 get방식으로 <jsp:include name=a value="b"> 사용한다.
<jsp:forward> 액션 태그
다른 JSP페이지로 이동한다.
a.jsp
<body>
a의 출력
<jsp:forward page="b.jsp" />
</body>
b.jsp
<body>
b의 출력
</body>
a.jsp 실행 화면
b가 실행된다. 위에 주소창을 보면 경로가 a.jsp인 상태에서 페이지만 옮겨진 것을 확인할 수 있다.
jsp 기본객체인 response.sendRedirect 와 같은 기능을 수행한다.
forward 액션은 주소창 경로는 그대로인 채로 페이지만 옮기지만 response객체의 메소드는 URL을 해당 페이지로 전환한다는 차이점이 있다.
그래서 forward 액션은 반드시 같은 웹 어플리케이션에 포함된 파일이어야 한다.
<jsp:param> 액션태그
<jsp:include>와 <jsp:forward> 태그의 하위 속성으로 사용된다.
삽입되는 문서에 전달하고자 하는 값이 있을 때 사용한다.
<jsp:parm name="[삽입할 키]" value="[삽입할 값]"/>
jsp 기본객체에 상응하는 메서드는
<% request.setAttribute("[삽입할 키]", [삽입할 값]); %>
이다.
param태그는 String값만 저장할 수 있지만 setAttribute() 메서드는 Object 타입의 객체를 저장할 수 있어
String타입이 아닌 데이터를 넘겨야할 경우 jsp기본객체의 setAttribute와 getAttribute메서드를 사용한다.
a.jsp
<jsp:forward page="b.jsp">
<jsp:param name="id" value="서종현"/>
<jsp:param name="pw" value="1234"/>
</jsp:forward>
b.jsp
<body>
b의 출력
<%
out.println("<br>");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
out.println(id);
out.println("<br>");
out.println(pw);
%>
</body>
param으로 값을 세팅하였을 때 (String타입)
getParameter메소드로 호출할 수 있지만
setAttribute로 세팅한 경우 (Object타입)
getAttribute메소드로 호출한다.