티스토리 뷰
이전 게시물에서 forward와 redirect를 사용해보았다.
<Forward>
https://live-for-myself.tistory.com/167
<Redirect>
https://live-for-myself.tistory.com/164
오늘은 Forward와 Redirect의 특징과 차이점에 대해서 알아보려 한다.
forward, redirect에 관해 정리가 잘 되어 있는 게시물이다. 이거 읽으면 이해 다 됨!!
https://doublesprogramming.tistory.com/63
그래도 큰 특징들을 정리해보자면,
Forward와 Redirect의 공통점
작업 중인 페이지에서 다른 페이지로 이동하는 페이지 전환 기능
차이점
1. Forward
- 응답을 위임한는 것.
- web container 차원에서의 페이지 이동으로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없음.
- url도 처음 호출한 url만 표시됨.
-동일한 web container에 있는 페이지로만 이동이 가능함. => context 경로 필요 x
- forward는 응답을 위임하는 것이기 때문에, 다음 이동한 url로 요청 정보를 그대로 전달함.
따라서, 요청한 요청 정보가 다음 url에서도 유효함 => 현재 실행 중인 페이지와 forward에 의해 호출될 페이지가 request, response, 객체를 공유함.
=> 단순 조회에 대한 응답에 바람직
2. Redirect
- web container가 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내림.
- 웹 브라우저의 url이 지시된 주소로 바뀌고, 그 주소로 이동함.
- 다른 web container에 있는 주소로 이동이 가능함. => context 경로 필요
- 새로운 페이지에서 request, response, 객체가 생성됨. 즉, 처음 요청한 요청 정보는 유효하지 않음.
=> 시스템에 변화가 생기는 요청(로그인, 회원가입, 글쓰기) 등에 바람직
그렇다면 예제를 살펴보자.
Forward와 Redirect 비교 예제
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/index.jsp</title>
</head>
<body>
<a href="test/busan.jsp">부산가기</a>
<a href="test/incheon.jsp">인천가기</a>
</body>
</html>
인천가기에 redirect를, 부산가기에 forward를 사용해보자.
1. Redirect
"response.sendRedirect(경로)"
incheon.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//순간적으로 요청 2번 일어남
//리다이렉트는 다른 context로도 가능하므로 context 경로도 적어야 함
String cPath =request.getContextPath();
response.sendRedirect(cPath+"/test/loginform.jsp");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/test.incheon.jsp</title>
</head>
<body>
</body>
</html>
redirect는 다른 context끼리도 이동이 가능하므로 꼭, context 경로를 써줘야 한다.
또한, redirect는 순간적으로 요청이 2번 일어나는 것이다.
"response.sendRedirect()"메소드를 사용하여 redirect한다.
인천가기 클릭 시
url을 보자.
처음 요청한 주소는 incheon.jsp 였는데 클릭하고 보니 loginform.jsp로 처음 요청한 경로와 다른 것을 확인할 수 있다.
따라서, redirect는 실제 페이지 이동으로, 웹 브라우저가 페이지가 이동했음을 알 수 있다.
그러면, 부산가기를 forward로 구현하여 forward와 redirect의 차이점을 눈으로 확인해보자.
2. Forward
"getRequestDispatcher().forward()"
busan.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//요청 1번 일어남(위임)
//포워드 이동은 동일한 context에서만 가능하므로 context 경로 적을 필요 없음
RequestDispatcher rd = request.getRequestDispatcher("/test/loginform.jsp");
rd.forward(request, response);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/test/busan.jsp</title>
</head>
<body>
</body>
</html>
부산가기 클릭 시
url을 보면, 처음 요청한 busan.jsp임을 확인할 수 있다.
하지만 내용은 loginform.jsp의 내용으로, busan.jsp에서 loginform.jsp로 응답을 위임했음을 확인할 수 있다.
따라서, forward 요청은 클라이언트가 알아차릴 수 없다.
'WEB > Java BackEnd' 카테고리의 다른 글
[WEB] jQuery #1 / chain action, EventListener (0) | 2021.12.01 |
---|---|
[WEB-jsp/servlet] Filter 사용하기 / 한글 인코딩, 로그인에 필터 사용헤보기 (0) | 2021.11.30 |
[WEB-jsp/servlet] Forward 예제 / RequestDispatcher (0) | 2021.11.30 |
[WEB-jsp/servlet] 로그인 / 로그아웃 구현하기 (0) | 2021.11.30 |
[WEB-jsp/servlet] jsp와 servlet에서 session 구현하기 (0) | 2021.11.30 |
- Total
- Today
- Yesterday
- html
- brute force
- 단계별로풀어보기
- 스프링
- 프로그래머스
- 파이썬
- web
- jsp
- 고득점 키트
- 브루트 포스
- Case When
- 덱
- 정렬
- baekjoon
- 자바
- 백준
- javascript
- Django
- 자바스크립트
- CSS
- append
- Java
- R
- bootstrap
- 장고
- python
- Oracle
- 문자열
- 큐
- jQuery
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |