- forward 방식: 웹 컨테이너 차원의 페이지 이동, 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고, 브라우저에 최초 호출한 URL이 표시된다.
- 최초 요청 (클라이언트 -> request -> URL 1)
- forward (URL 1 -> forward -> URL 2)
- 응답 (URL 2 -> response -> 클라이언트)
- redirect 방식: 다른 웹 컨테이너에 있는 주소로 이동 가능, 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동
- 최초 요청 (클라이언트 -> request 1 -> URL 1)
- redirect할 새로운 URL 2 리턴 (URL 1 -> redirect -> 클라이언트)
- URL 2 요청 (클라이언트 -> request 2 -> URL 2)
- 응답 (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>
- 코드 실행 결과:
참고한 페이지: doublesprogramming.tistory.com/63
'Programming > JSP' 카테고리의 다른 글
[JSP] 자바서버 페이지(JSP)와 서블릿(Servlet) (0) | 2020.12.30 |
---|