HttpServletResponse 의 sendRedirect 메서드
Java Servlet 에서 페이지 이동을 위해 redirect 하는 메서드이다.
Http 프로토콜을 사용하여 정해진 규칙으로 서버가 클라이언트에게 특정 URL 로 이동하라고 요청을 보낸다.
sendRedirect 메서드를 사용하게 되면 서버에서는 클라이언트에게 응답 상태값을 302 와 함께 이동할
URL 정보를 Location 헤더값에 담아 전송한다.
클라이언트 브라우저는 서버로부터 받은 상태값이 302 일 경우 Location 헤더 값으로 재요청을 보내어
Redirect 하게 된다.
예시)
개발환경 : Spring Boot, JSP
위처럼 jsp 페이지가 2개가 존재한다.
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
response.sendRedirect("/test2");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
asdfsadfasdfasd
</body>
</html>
response.sendRedirect 를 통해 "/test2" 페이지로 Redirect 한다.
test2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Redirect 페이지입니다.
</body>
</html>
"/test" URL 로 이동 시 jsp 페이지 내의 자바코드 response.sendRedirect("/test2") 로 인해
서버에서는 Location 값과 상태 값을 302 로 변경하여 응답한다.
응답받은 클라이언트 브라우저는 Location 헤더 값으로 Redirect 재요청 한다.
RequestDispatcher 의 forward 메서드
클라이언트로부터 요청을 받고 이를 다른 리소스(서블릿, JSP, HTML)로 전달하는 메서드이다.
sendRedirect 는 HttpServletResponse 객체를 새로 생성하여 Redirect 시키지만
RequestDispatcher 의 forward 는 다른 리소스(서블릿, JSP, HTML)로 전달할 때
사용자 요청에 생성된 request, response 객체를 새로 생성하지 않고 그대로 전달한다.
예시)
@Controller
public class TestController {
@RequestMapping(value="/test")
public String test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("/test2");
rd.forward(request, response);
return "test";
}
@RequestMapping(value="/test2")
public String test2() {
return "test2";
}
}
위와 같이 RequestDispatcher 에 "/test2" 요청에 대한 정보를 넣고 forward 를 하게 되면
정상적인 "/test" 요청이지만 View 에 대한 정보는 "/test2" 인 걸 확인할 수 있다.