티스토리 뷰

WEB/DynamicWeb

[JSP] forward 활용

춘햄 2021. 4. 21. 11:31

Response의 Redirect는 해당 페이지에서 요청한 Request값을 받아서 다시 다른 페이지로 넘겨야 하는 경우, 새로운 Request를 하나 더 생성하여 다음 페이지/파일로 보내는 구조로 동작한다.

하지만, 이때 forward를 사용하면 최초로 요청한 request가 그대로 유지되어 다음 페이지로 전송되게 된다.

간단한 예시를 보며 이해해보자. 

 

기본적인 페이지의 구조는 다음과 같다


forwardForm.jsp -> forwardTest.jsp -(if 성공)-> forwardResultSuccess.jsp 

                                              -(if 실패)-> -> forwardResultFail.jsp

 

forwardForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
<body>
	입장하려면 나이를 입력하세요 <br />
	<form action = "forwardTest.jsp" >
		<input type = "text" name = "age" required = "required"/>
		<input type = "submit" value = "전송" />
	</form>
</body>
</html>

forwardTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
<%	
		String tempA = request.getParameter("age");
		int age = Integer.parseInt(tempA);
		
		if(age <= 19) {
			//response.sendRedirect("forwardResultFail.jsp?age=" age); 
            <-- request를 한번 더 생성한다. 
			RequestDispatcher dispatcher = request.getRequestDispatcher("forwardResultFail.jsp");
			dispatcher.forward(request, response); //인자는 변경 불가, 반드시 request와 response가 입력되어야 한다.
			//forward는 request가 가직 있는 값을 그대로(Request 재생성 없이) Form 이 보내줬던 age 값을 forwardResultFail로 보낸다. 
		} else { 
			RequestDispatcher dispatcher = request.getRequestDispatcher("forwardResultSuccess.jsp");
			dispatcher.forward(request, response);
		}
%>

forwardResultSuccess.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%
	String age = request.getParameter("age");   
   
%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor = "green">
	입력된 나이는 <%= age %> 입니다. 입장 가능합니다.
</body>	
</html>

forwardResultFail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%
	String age = request.getParameter("age");   
   
%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor = "red">
	입력된 나이는 <%= age %> 이기 때문에 입장할 수 없습니다.
</body>	
</html>

이런 구조와 같이 해당 값을 request 하여 java코드에서 연산 후, 별다른 표시 없이 다음 페이지로 넘기는 과정의 경우 

forward를 사용하는 것이 더 시스템 입장에서는 더욱 간결한 과정이기 때문에 사용한다.

Comments