이 둘을 이해하기 위해서는
클라이언트(브라우저)에서 넘어오는 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 모델을 이해하는데 도움이 됩니다. 엄청나게..