티스토리 뷰

728x90
반응형

이전 게시물에서 forward와 redirect를 사용해보았다.


<Forward>

https://live-for-myself.tistory.com/167

 

Forward

1. Forward jsp => jsp도 가능하지만, 보통 servlet => jsp가 일반적이다. 예제 1 index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> index.js..

live-for-myself.tistory.com

 

 

 

<Redirect>

https://live-for-myself.tistory.com/164

 

[WEB] jsp와 servlet에서 session 구현하기

세션이란 서버 측의 컨테이너에서 관리되는 정보로, 이 정보는 컨테이너에서 접속해서 종료되기까지 유지되며 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 더 이상 유지되지 않도

live-for-myself.tistory.com


오늘은 Forward와 Redirect의 특징과 차이점에 대해서 알아보려 한다.

forward, redirect에 관해 정리가 잘 되어 있는 게시물이다. 이거 읽으면 이해 다 됨!!

https://doublesprogramming.tistory.com/63

 

Redirect VS, Forward (Redirect와 forward의 차이)

Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보

doublesprogramming.tistory.com


 

그래도 큰 특징들을 정리해보자면,

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 요청은 클라이언트가 알아차릴 수 없다.

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함