Programming/JSP

[JSP] forward와 sendRedirect의 차이

망고밥 2020. 12. 31. 13:58
  • forward 방식: 웹 컨테이너 차원의 페이지 이동, 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고,  브라우저에 최초 호출한 URL이 표시된다.
  1. 최초 요청 (클라이언트 -> request -> URL 1)
  2. forward (URL 1 -> forward -> URL 2)
  3. 응답 (URL 2 -> response -> 클라이언트)
  • redirect 방식: 다른 웹 컨테이너에 있는 주소로 이동 가능, 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동
  1. 최초 요청 (클라이언트 -> request 1 -> URL 1)
  2. redirect할 새로운 URL 2 리턴 (URL 1 -> redirect -> 클라이언트)
  3. URL 2 요청 (클라이언트 -> request 2 -> URL 2)
  4. 응답 (URL 2 -> response -> 클라이언트)

(이 때, 요청 1과 요청 2는 서로 다르며, 각자 새로운 요청을 수행한다.)

 

  • forward와 redirect 차이점:
forward 방식 sendRedirect 방식
JSP 액션 태그이다. JSP 내장 객체이다. (response)
요청 정보가 유지된다. 새로운 요청이 수행된다.
URL이 변화하지 않는다. URL이 변화한다.
객체를 재사용한다. 객체를 재사용하지 않는다. (새로운 요청)
시스템 변화가 생기지않는 요청에 적합 (검색 등의 단순 조회) 시스템 변화가 생기는 요청에 적합 (로그인, 글쓰기 등)

 

  • forward VS redirect 예제 코드:
<!--forwardRedirect.jsp-->

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>page control</title>
</head>
<body>
  <hr>
  <form method=post action=forward_action.jsp>
      forward action : <input type=text name=username>
      <input type=submit value="확인">
  </form>

  <form method=post action=response_sendRedirect.jsp>
      response.sendRedirect : <input type=text name=username>
      <input type=submit value="확인">
  </form>
</body>
</html>

 

<!--forward_action.jsp-->

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<% request.setCharacterEncoding("UTF-8"); %>
	
	<!--forward 액션은 최종 페이지에 파라미터를 함께 전달함, 최초 요청된 페이지 url이 표시됨 -->
	<jsp:forward page="page_control_end.jsp">
		<jsp:param name="tel" value="000-000-0000"/>
	</jsp:forward>
</body>
</html>

 

<!--response_sendRedirect.jsp-->

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
  <!-- sendRedirect는 단순히 지정된 페이지로 최종 화면 이동, 최종 전달된 페이지 url이 표시됨 -->
  <% response.sendRedirect("page_control_end.jsp"); %>
</body>
</html>

 

<!--page_control_end.jsp-->

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<hr>
	결과창
	<hr>
	이름: <%= request.getParameter("username") %> <br>
	전화번호: <%= request.getParameter("tel") %>
</body>
</html>

 

  • 코드 실행 결과:

두 개의 폼에 각각 hello를 넣고 테스트 해 본다. 

 

forward action은 최초 요청 URL과 요청 정보가 그대로 유지되는 것을 볼 수 있다.

 

sendRedirect는 새로운 요청이 수행되고 페이지 URL이 바뀐 것을 볼 수 있다.

 

 

참고한 페이지: doublesprogramming.tistory.com/63

 

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

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

doublesprogramming.tistory.com

 

'Programming > JSP' 카테고리의 다른 글

[JSP] 자바서버 페이지(JSP)와 서블릿(Servlet)  (0) 2020.12.30