티스토리 뷰

 

<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규약에 따라 에러가 발생하게 됩니다.