반응형

Redirect와 Forward 차이

 

1. Redirect

 

특정 URL에 접속하면 클라이언트에 이동할 URL 정보를 제공하고(상태 코드 302) 클라이언트는 리다이렉트 주소로 이동한다(웹 브라우저 주소는 리다이렉트 URL 주소로 변경된다).

 

response.sendRedirect("home.jsp");

 

(1) 클라이언트 ----> 서버 URL1(서블릿/JSP)    

(2) 서버 URL1 ----> 클라이언트  (서버는 다른 주소로 연결할 것을 응답)

(3) 클라이언트 ----> 서버 URL2(서블릿/JSP)   (클라이언트는 제공받은 다른 주소로 요청)

(4) 서버 URL2(서블릿/JSP) ----> 클라이언트 

 

[예제 코드] 접속한 url에서 다른 url(예; home.jsp)로 보내기 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    response.sendRedirect("home.jsp");
%>

 

2. Forward

 

요청된 내용을 처리하다가 추가 처리를 위해 다른 서블릿/JSP를 호출하면서 응답을 위임한다. (웹 브라우저에서 처음 접속한 URL은 바뀌지 않고 유지된다).

 

(1) 클라이언트 ----> 서버 URL1(서블릿/JSP) 

(2) 서버 URL1 ----> 다른 서블릿/JSP  (서버 URL1에서 다른 서블릿/JSP 파일에 응답하게 함)

(3) 다른 서블릿/JSP ----> 클라이언트  (클라이언트에 응답함)

 

[예제 코드] FrontServlet (/front)

package examples;
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;
@WebServlet("/front")
public class FrontServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public FrontServlet() {
        super();
    }
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setAttribute("username", "홍길동");            
            RequestDispatcher requestDispatehcer = request.getRequestDispatcher("/next");
            requestDispatehcer.forward(request, response);
    }
}

 

[예제 코드] NextServlet.java (/next)

package examples;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/forward")
public class ForwardServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public ForwardServlet() {
        super();
    }
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");        
        request.setCharacterEncoding("UTF-8");         
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>next</title></head>");
        out.println("<body>");
        String username = (String)request.getAttribute("username");
        out.println(username + "님, 반갑습니다.");
        out.println("</body>");
        out.println("</html>");
    }
}

 

 

반응형

+ Recent posts