- [JSP]<jsp:forward> forward액션 태그 목차
<jsp:forward>
<jsp:forward> 액션태그는 하나의 JSP 페이지에서 다른 JSP페이지로 요청 처리를 전달할때 사용합니다.
웹 브라우저의 요청을 최초로 전달받는것은 form.jsp인데 전체적으로 아래와 같은 순서로 프름이 제어됩니다.
1. 웹브라우저의 요청이 from.jsp에 전달됩니다.
2. form.jsp는 <jsp:forward> 액션태그글 실행합니다.
3. <jsp:forward> 액션태그가 실행되면 요청 흐름이 to.jsp로 이동합니다.
4. 요청 흐름이 이동할때 from.jsp에서 사용한 request 기본객체와 response 기본객체가 to.jsp로 전달됩니다.
5. to.jsp는 응답 결과를 생성합니다.
6. to.jsp가 생성한 결과가 웹브라우저에 전달됩니다.
■사용이유
왜 from.jsp에서 처리할 내용을 굳이 to.jsp로 이동하냐 ?
-.> '간결하고 구조적으로 웹/JSP 프로그래밍을 할 수 있기 때문 ' 또한, 각 조건을 처리하는 JSP를 분리하여 기능별로 모듈화 할 수 있게 해준다.
즉, 조건에 따라 다른 결과를 받아내기 위해서다.
■<jsp:forward>액션태그의 사용법
<jsp:forward page="이동할페이지"/>
이동할 페이지는 웹 어플리케이션 내에서의 경로를 나타내며 직접 값을 지정하거나 표현싱의 결과를 값으로 지정할수 있다.
//직접지정
<jsp:forward page="to.jsp"/>
//표현식의 결과로 지정
<%
String uri="to.jsp";
%>
<jsp:forward page="<%=uri%>"/>
■ 사용예제
from.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
<jsp:foward> 액션태그를 실행하면 생성했던 출력 결과는 모두제거 됩니다.
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>from.jsp</title>
</head>
<body>
이페이지는 from.jsp가 생성한 것입니다.
<jsp:forward page="to.jsp"/>
</body>
</html>
to.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>to.jsp</title>
</head>
<body>
이페이지는 to.jsp가 생성한 것입니다.
</body>
</html>
결과
예제2)
Select.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>옵션 선택화면</title>
</head>
<body>
<form action="view.jsp">
보고싶은 페이지 선택 :
<select name="code">
<option value="A">A 페이지</option>
<option value="B">B 페이지</option>
<option value="C">C 페이지</option>
</select>
<input type="submit" value="value">
</form>
</body>
</html>
view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String code = request.getParameter("code");
String viewPageURI = null;
if(code.equals("A")){
viewPageURI="/view/a.jsp";
}else if(code.equals("B")){
viewPageURI="/view/b.jsp";
} else if(code.equals("C")){
viewPageURI="/view/c.jsp";
}
%>
<jsp:forward page="<%=viewPageURI %>"/>
a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>A 페이지</title>
</head>
<body>
이페이지는 <b><font size="5">A</font></b>입니다.
</body>
</html>
■<jsp:forward> 액션태그와 출력 버퍼와의 관계
from.jsp에서 생성한 결과는 전혀 출력되지 않고. to.jsp에서 생성한 결과가 웹 브라우저에 출력된 것을 확인 할수 있었습니다. 이렇게 <jsp:forward> 액션 태그를 사용하는 jsp페이지의 출력 결과가 웹 브라우저에 선송되지 않은 이유는 출력 버퍼때문입니다.
출력 버퍼를 비우고 새로운 내용을 버퍼에 삽입하기 때문에 <jsp:forward>를 실행하기 이전에 출력 버퍼에 저장됐던 내용은 웹 브라우저에 전송되지 않습니다.
또한 <jsp:forward>액션 태그 뒤에 위치한 코드는 실행 조차 되지 않습니다.
또한 forward액션 태그가 실행 되기전에 웹 브라우저에 데이터가 전송되면 안됩니다 !!!
출력 버퍼에 데이터가 저장된다는것은 웹브라우저에 데이터가 직접 전송되지 않는다는 것을 의미합니다. 출력 버퍼가 존재하기 때문에<jsp:forward> 액션 태그를 사용할수 있게 되는것입니다.
또한, buffer속성을 "none"으로 설정하면 에러(제대로 동작 X )가 발생한다.
buffer속성을 "none"으로 했을 경우
<%@ page language="java" buffer="none" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
버퍼가 없을 경우 <jsp:forward>액션태그가
올바르게 실행되지 않을수도 있습니다.
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>form.jsp의 제목</title>
</head>
<body>
이 페이지는 from.jsp가 생성한 것입니다.
<jsp:forward page="to.jsp"/>
</body>
</html>
버퍼가 없을때 뿐만 아니라 버퍼가 차서 버퍼의 내용을 웹 브라우저에 한번 전송한 이후에 <jsp:forward>액션 태그를 사용하는 경우에도 JSP규약에 따라 에러가 발생하게 됩니다.
'Web(국비) > JSP' 카테고리의 다른 글
[JSP]자바빈과 <jsp:useBean>액션 태그란? (0) | 2019.11.02 |
---|---|
[JSP]기본(내장)객체의 속성(Attribute)- request.setAttribute (0) | 2019.11.02 |
[JSP]include디렉티브와 코드 조각 자동 포함 기능 (0) | 2019.11.02 |
<jsp:param>데이터 전달하기 (0) | 2019.11.02 |
페이지 모듈화<jsp:include>액션 태그 (0) | 2019.11.02 |