본문 바로가기
Servlet & JSP

Redirect

by kmmguumnn 2018. 6. 29.
  • Redirect는 HTTP 프로토콜로 정해진 규칙이다.
  • 서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 Redirect라고 한다.
  • 서버는 클라이언트에게 HTTP 상태코드(Status Code) 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다. 클라이언트는 redirection 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.
  • Servlet이나 JSP는 Redirect하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.

예제 코드를 통해 살펴 보자.
먼저 redirect01.jsp라는 파일을 아래와 같이 만들었다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    response.sendRedirect("redirect02.jsp");
%>    
response 객체의 sendRedirect라는 메소드를 활용해 서버가 redirect를 요청한다. 이 때 괄호 안에 넣은 "redirect02.jsp"가 Location 헤더값, 즉 redirect의 결과로 다시 이동하게 되는 대상이 되는 것이다.


redirect된 결과로써 향하게 되는 redirect02.jsp라는 파일도 아래와 같이 만들었다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
redirect된 페이지 입니다.
</body>
</html>

위의 코드들을 저장하고, redirect01.jsp를 실행시키면, 주소창은 http://localhost:8080/.../redirect02.jsp 와 같이 바뀌어있는 것을 볼 수 있다.




즉 클라이언트는 총 2번의 요청을 하게되는 셈이다.
또한 redirect01.jsp에 대한 요청이 들어갔을 때 생기는 요청객체와 응답객체, redirect02.jsp에 대한 요청이 들어갔을 때 생기는 요청객체와 응답객체는 서로 다를 것이다. 


브라우저에서 개발자도구를 켜고 Network 탭을 연 뒤, redirect01.jsp를 요청하게 되면 다음을 확인할 수 있다.



여기서 좌측의 redirect01.jsp를 클릭하면 다음이 나타난다.


redirect01.jsp의 Status code가 302다. 즉 redirect임을 알 수 있다.
Request Headers의 Location은 redirect02.jsp라고 되어있다. 즉 서버가 redirect02.jsp로 재요청(redirect)한 것이다.


'Servlet & JSP' 카테고리의 다른 글

Servlet & JSP의 4가지 Scope  (0) 2018.07.01
Forward, 그리고 Servlet & JSP의 연동  (0) 2018.06.30
JSP 기초  (0) 2018.06.29
Servlet 기초  (0) 2018.06.29
미들웨어 / 웹서버 / WAS  (0) 2018.05.30

댓글