리다이렉트(redirect)
- 리다이렉트는 http프로토콜로 정해진 규칙이다.
- 서버는 클라이언트로부터 요청을 받은 후, 클라이언트에게 특정 URL을 이동하라고 요청할 수 있다. 이를 리다이렉트라고 한다.
- 서버에서는 클라이언트에게 응답으로 상태코드를 302와 함께 이동할 URL정보를 Location 값에 이동할 URL을 추가한다. 클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.
- 클라이언트는 서버로부터 받은 상태 값이 302이면 Location헤더값으로 재요청을 보내게 된다. 이때 브라우저의 주소창은 전송받은 URL로 바뀌게 된다.
- 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
리다이렉트 실습
리다이렉트가 어떻게 동작하는지 직접 실습을 해보았다.
먼저 redirect01.jsp, redirect02.jsp 파일을 작성했다.
redirect01을 요청했을 때 redirect02.jsp로 리다이렉트되는 로직이 실행되도록 구현하였다.
코드는 다음과 같다.
redirect01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
response.sendRedirect("redirect02.jsp");
%>
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를 우클릭해서 Run을 클릭 (intellij)
결과 화면
우리가 요청한 것은 http://localhost:8080/redirect01.jsp였다.
하지만 응답된 결과는 http://localhost:8080/redirect02.jsp이다.
브라우저에서 리다이렉트 확인
조금 더 자세하고 정확한 동작 원리를 살펴보기 위해 브라우저에서 리다이렉트를 확인해 보았다.
크롬에서 우측버튼을 누르고 검사를 선택한 후 Network탭을 선택한다.
redirect01.jsp를 실행하면 서버로부터 응답코드로 302를 받는 것을 알 수 있다.
결과만 놓고 봤을 때 리다이렉트는 redirect01을 요청할 때 바로 redirect02를 응답하는 것처럼 보이지만 동작 과정을 살펴보면 그렇지 않다는 것을 알 수 있다.
웹 브라우저가 redirect01.jsp를 요청을 하면 서버는 redirect01에 대한 응답 객체를 브라우저에게 전달한다. 이 응답 객체에는 redirect02로 리다이렉트를 요청하라는 내용(응답코드: 302, Location헤더 값: redirect02.jsp)이 담겨 있다. 웹브라우저는 응답 데이터 속에서 WAS의 리다이렉트 요청을 확인하고 redirect02.jsp를 다시 요청한다. 그리고 WAS는 redirect02요청에 대한 결과를 출력하는 것이다.
리다이렉트에서 눈여겨 보아야 할 것은 순식간에 요청과 응답이 두 번 일어난다는 것이다.
리다이렉트 어디서 활용 가능할까?
상당히 많은 부분에서 리다이렉트를 활용 가능하다. 예를 들어, 로그인을 한 경우에만 접근 가능한 페이지가 있다고 할 때 로그인이 되어 있지 않으면 로그인 페이지로 리다이렉트를 걸어 줄 수 있다. 혹은 로그인을 시도할 때 버튼을 클릭하고 로그인이 완료된 경우 메인 페이지로 리다이렉트를 걸어 주는 방법도 가능하다. 활용하기 나름인 것 같다.
[부스트코스 관련 강의 링크]
redirect - https://www.edwith.org/boostcourse-web/lecture/19878/
'Tech > BoostCourse - WEB' 카테고리의 다른 글
[부스트코스] servlet & jsp 연동 (0) | 2020.02.28 |
---|---|
[부스트코스] forward란? (forward와 redirect 차이) (0) | 2020.02.28 |
[부스트코스] JSP 내장객체(Implicit Objects) (0) | 2020.02.25 |
[부스트코스] JSP 문법 (0) | 2020.02.25 |
[부스트코스] JSP 라이프싸이클 (0) | 2020.02.25 |