새소식

반응형
Java/Spring

HttpServletResponse 의 sendRedirect() 와 RequestDispatcher 의 forward() 메서드 차이

  • -
반응형

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" 인 걸 확인할 수 있다.

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.