JSP에서 제공하는 액션 태그
· include //페이지 모듈화
· forward //페이지의 흐름 제어
· plug-in //애플릿을 사용할 때
· useBean //자바빈을 사용할 때
· serProperty //자바빈의 속성값을 저장할 때
· getProperty //자바빈의 속성값을 읽어올 때
액션 태그는 XML (=표준) 문법을 따르기 때문에 단독 태그의 경우도 반드시 종료 태그를 포함 해야 한다.
1. body 가 있는 경우 : 시작 태그와 종료 태그의 쌍으로 이루어 진다.
<jsp:include page="a.jsp" flush="false">
<jsp:param name="paramName" value="value1"/>
</jsp:include>
2. body 가 없는 경우 : 시작 태그와 종료 태그가 포함된다.
<jsp:param name="paramName" value="value1"/>
include 액션 태그 <jsp:include>
<jsp:include> 액션 태그는 include 디렉티브 <%@ include%> 와 함께 다른 페이지를 현재 페이지에 포함시킬 수 있는 기능을 가지고 있다. include 디렉티브는 단순하게 소스의 내용이 텍스트로 포함이 되지만 <jsp:include> 액션 태그는 페이지의 처리 결과를 포함시킨다는
점이 다르다. 이때 포함되는 페이지는 html, jsp, Servlet 등 모두 가능하다.
또한, include 디렉티브는 주로 조각 코드를 삽입할 때 사용되고, <jsp:include> 액션 태그는 페이지를 모듈화할 때 사용된다.
즉, 템플릿 페이지를 작성할 때 사용된다.
ex)
<jsp:include page="포함될 페이지" flush="true"/>
<jsp:inlcude> 액션 태그의 page 속성의 값은 현재 페이지에 결과가 포함될 페이지 명이 된다. 이때 포함될 페이지 명은 때에 따라 상대 경로를 쓰거나 웹 어플리ㅇ케이션의 절대 경로를 사용한다. 또한 page속성의 값은 표현식을 사용할 수 있다.
String content=request.getParameter("name");
<jsp:include page="<%=content%>" flush="false"/>
flush 속성은 포함될 페이지로 제어가 이동될 때 현재 포함하는 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리하는 방법을 결정하는
것으로, flush 속성의 값을 true로 지정하면 포함될 페이지로 제어가 이동될 때 현재 페이지가 지금 까지 버퍼에 저장한 내용을 웹 브라우저에 출력하고 버퍼를 비운다.
<jsp:include> 액션 태그의 사용법의 권장 형태
<jsp:include page="포함될 페이지" flush="false" />
<jsp:include> 액션 태그에서 flush 속성의 값은 false로 지정하는 것이 일반적이다.
만일 flush 속성의 값을 true로 지정하면 일단 출력 버퍼의 내용을 웹 브라우저에 전송하게 되는데 이때 헤더 정보도 같이 전송된다.
일단 헤더 정보가 웹 브라우저에 전송이 되고 나면 헤더 정보를 추가해도 결과가 반영되지 않는다.
처리과정
1. 웹 브라우저가 a.jsp 페이지를 웹 서버에 요청한다.
2. 서버는 요청받은 a. jsp 페이지를 처리하는데, a.jsp 페이지 내에서 출력 내용을 출력 버퍼에 저장하는 작업을 처리한다.
3. 이 때 a.jsp 소스 내에 <jsp:include page="b.jsp" flush="false" /> 문장을 만나면 하던 작업을 멈추고 프로그램 제어를 b.jsp 페이지로
이동시킨다.
4. b.jsp 페이지는 페이지 내에 출력 내용을 출력 버퍼에 저장하는 등의 작업을 처리한다.
5. b.jsp 페이지의 처리가 끝나면 다시 a.jsp 페이지로 프로그램의 제어가 이동하는데,
이동 위치는 <jsp: include page="b.jsp" flush="false" /> 문자 이후이다.
6. a.jsp 페이지의 나머지 부분을 처리한다. 출력할 내용이 있으면 출력 버퍼에 저장한다.
7. 출력 버퍼의 내용을 웹 브라우저로 응답한다.
<jsp:include> 액션 태그는 같은 request 내부 객체를 공유한다.
<jsp:include> 액션 태그에서 포함되는 페이지에 값 전달하기
<jsp:include> 액션 태그는 포함되는 JSP 페이지에 값을 전달할 수 있다.
포함되는 JSP 페이지에 값 전달은 요청 파라미터를 추가적으로 지정해서 사용할 수 있는데,
<jsp:include> 액션 태그의 바디(body)안에 <jsp:param> 액션 태그를 이용하여 다음과 같은 형태로 사용하면 된다.
<jsp:include page="포함되는 페이지" flush="false">
<jsp:param name="paramName1" value="var1" />
<jap:param name="paramName2" value="var2" />
</jsp:include>
<jsp:param> 액션 태그의 name 속성은 포함되는 JSP 페이지에 전달할 파라미터의 이름을 표시하고, value 속성은 전달할 파라미터의
값을 표시한다. 이때 value 속성의 값으로 표현식을 사용할 수 있다.
<jsp:include page="b.jsp" flush="false">
<jsp:param name="p1" value="<%=var%>" />
</jsp:include>
<jsp:param> 태그는 단독으로 쓰일 수 없고 <jsp:include> 나 <jsp:forward> 안에 포함되어 쓰여져야 한다.
예제
includeTag2Form.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>include 액션 태그에서 포함되는 페이지에 값 전달하기</h2>
<form method=post action="includeTag2.jsp">
이름 : <input type="text" name="name"><p>
나이 : <input type="text" name="age"><p>
<input type="submit" value="보내기">
</form>
</body>
</html>
includeTag2.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>includeTag2.jsp 페이지 입니다.</h2>
<%
request.setCharacterEncoding("euc-kr");
String name=request.getParameter("name");
String age=request.getParameter("age");
%>
<hr>
<jsp:include page="includeTagTop2.jsp" flush="false">
<jsp:param name="irum" value="<%=name %>"/>
<jsp:param name="nai" value="<%=age %>"/>
</jsp:include>
includeTag2.jsp 페이지의 나머지 내용입니다.<p>
</body>
</html>
includeTagTop2.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String irum2=request.getParameter("irum");
String nai2=request.getParameter("nai");
%>
includeTagTop2.jsp 페이지 입니다.<p>
이름 : <b><%=irum2 %></b>
나이 : <b><%=nai2 %></b>
<hr>
</body>
</html>
JSP 페이지의 중복 영역 처리 : JSP 페이지의 모듈화
보통 프로그래밍을 할 때 중복되는 부분은 따로 모듈로 작성해서, 필요할 때마다 호출해 쓰는 방식을 사용하고 있다.
예를 들어
<table>
<tr>
<td colspan="2"><jsp:include page="top.jsp" flush="false"/></td>
</tr>
<tr>
<td><jsp:include page="left.jsp" flush="false"/></td>
<td><jsp:include page="<%=content%>" flush="false"/></td>
</tr>
<tr>
<td colspan="2"><jsp:include page="bottom.jsp" flush="false"/></td>
</tr>
</table>
사이트 수정시 각 해당 페이지만 수정할수 있지만
아래와 같은 구조라면
<table>
<tr>
<td colspan="2">상단</td>
</tr>
<tr>
<td>좌측</td>
<td>중앙내용</td>
</tr>
<tr>
<td colspan="2">하단</td>
</tr>
</table>
모든 페이지를 수정해야 할지도 모른다.
페이지를 모듈화하는 가장 큰 이유는 사이트 유지보수가 쉽기 때문이다.
include 디렉티브 <%@ include file="경로"> 와 <jsp: include> 액션태그와의 차이점은
<jsp:include> 액션 태그는 결과를 포함시키고, include 디렉티브는 코드를 복사해서 함께 서블릿으로 변환한다.
즉, include 디렉티브는 코드 차원에서 포함되므로 주로 공용 변수, 저작권 표시와 같은 중복 문장에 사용된다.
forward 액션 태그 <jsp:forward>
<jsp:forward> 액션 태그는 다른 페이지로 프로그램의 제어를 이동할 때 사용되며,
JSP 페이지 내에 <jsp:forward> 액션 태그를 만나게 되면, 그전까지 철력 버퍼에 저장되어 있던 내용을 제거하고 <jsp:forward> 액션
태그가 지정하는 페이지로 이동하게 된다.
ex)
<jsp:forward page="이동할 페이지명"/>
<jsp:forward page="이동할 페이지명"></jsp:forward>
<jsp:forward page='<%=expression+".jsp"%>'/> // 주의 : 표현식은 따옴표 ' ' (1개짜리따옴표)
page 속성의 값인 이동할 페이지 명은 웹 어플리케이션 상대 경로나 웹 어플리케이션 절대 경로로 지정할 수 있고, 표현식도 가능하다.
포워딩은 파일은 웹 브라우저에 경로가 표시되지 않는다. 포워딩시킨 파일만 경로가 표시된다.
<jsp:forward> 액션 태그에서 포워딩되는 페이지에 값 전달하기
<jsp:forward page="이동할 페이지명">
<jsp:param name="paramName1" value="var1"/>
<jsp:param name="paramName2" value="var2"/>
</jsp:forward>
<jsp:forward> 액션 태그에서 <jsp:param> 태그로 프로그램의 제어가 이동할 페이지에 파라미터 값을 전달할 때 사용한다.
sendRedirect()메소드는 바인딩된 데이터가 유지 되지 않는다.(주소가 변한다.)
forward 액션태그는 데이터가 유지된다.(주소가 변하지 않는다.)
댓글을 달아 주세요