Servlet (서블릿)

[Tip] forward vs sendRedirect

고인돌개발자 2021. 4. 23. 23:00

이 둘을 이해하기 위해서는 

클라이언트(브라우저)에서 넘어오는 request 가 어디까지 가는지를 따라 다녀야 한다.

 

forward - request 가  호출된 servlet ( view.jsp ) 까지 연결된다. 
             처음 호출된 servlet or jsp 에서 다음 servlet or jsp 로 request를 배달(Dispatcher) 해준다. 

 

sendRedirect -  request 가  호출된 servlet 에서 일을 마치면, 다른 url 을 호출한다.
                     forward 와 다른건 요청 request 가 redirect 로 이동하는 url 에 전달되지 않는다.

 

아래 소스를 가볍게 실행해보면 느낌이 올듯 ..

 

1. 디렉토리 구조

<이클립스 구조>

 

2. 서블릿 하나.

package com.easy;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class EasyServlet
 */
@WebServlet("/EasyServlet")
public class EasyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EasyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("Hello");
		
		String strName = request.getParameter("name");
		
		System.out.println(strName);
		
		
		String strForward = "/WEB-INF/view/forward.jsp";
		String strSend    = "/Easy/send.jsp";
		
		
		request.setAttribute("Age", "40 years");
		
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(strForward);
		dispatcher.forward(request, response);
		
		
		//response.sendRedirect(strSend);
		
		System.out.println("수고했어..");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

2. WebContent 아래 send.jsp 파일 하나 (sendRedirect 에서 사용)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
 <%     
	 String strName = request.getParameter("name");
	 out.println("send.jsp. name => "+ strName);       
	 
	 out.println("<p>");
	 
	 String strAge =(String) request.getAttribute("Age");
	 out.println("send.jsp. Age => "+ strAge);  
%>   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<p> Send.jsp 

</body>
</html>

3. /WEB-INF/view/forward.jsp ( forward 에서 사용할거임 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%     
	  String strName = request.getParameter("name");
	  out.println("forward.jsp. name => "+ strName);       
	  
	  out.println("<p>");
	  
	  String strAge =(String) request.getAttribute("Age");
	  out.println("forward.jsp. Age => "+ strAge);  
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<p> Forward.jsp .

</body>
</html>

 

request.forward 를 가지고 이렇게 저렇게 테스트를 하다보면, 

MVC 모델을 이해하는데 도움이 됩니다. 엄청나게..