728x90
forward
forward 방식은 웹 컨테이너 차원의 페이지 이동으로 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고, 브라우저에 최초 호출한 URL이 표시됩니다.
forward 실행 순서
- 최초 요청 (클라이언트 → request → URL 1)
- forward (URL 1 → forward → URL 2)
- 응답 (URL 2 → response → 클라이언트)
redirect
redirect 방식은 다른 웹 컨테이너에 있는 주소로 이동 가능하며 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동합니다.
redirect 실행 순서
- 최초 요청 (클라이언트 → request 1 → URL 1)
- redirect할 새로운 URL 2 반환 (URL 1 → redirect → 클라이언트)
- URL 2 요청 (클라이언트 → request 2 → URL 2)
- 응답 (URL 2 → response → 클라이언트)
forward와 redirect의 차이
forward 방식 | sendRedirect 방식 |
JSP 액션 태그이다. | JSP 내장 객체이다. (response) |
요청 정보가 유지된다. | 새로운 요청이 수행된다. |
URL이 변화하지 않는다. | URL이 변화한다. |
객체를 재사용한다. | 객체를 재사용하지 않는다. (새로운 요청) |
시스템 변화가 생기지 않는 요청에 적합 (검색 등의 단순 조회) | 시스템 변화가 생기는 요청에 적합 (로그인, 글쓰기 등) |
실습
1. 데이터 전송
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 보안, 데이터의 양이 많을 경우 POST방식으로 전송 -->
<form action="test04.jsp" method="post">
선택상자 <select name="box">
<option value="apple">사과</option>
<option value="banana">바나나</option>
<option value="kiwi">키위</option>
</select>
<br>
체크박스 <input type="checkbox" name="fav" value="영화">영화
<input type="checkbox" name="fav" value="드라마">드라마
<input type="checkbox" name="fav" value="애니매이션">애니매이션
<br>
<input type="submit" value="데이터 전송">
</form>
</body>
</html>
2. 전송한 데이터 받기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
선택상자 <%= request.getParameter("box") %><br>
체크박스
<ul>
<%
String[] datas = request.getParameterValues("fav");
for (int i = 0; i < datas.length; i++) {
out.println("<li>" + datas[i] + "</li>");
}
%>
</ul>
</body>
</html>
3. forward / sendRedirect
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작 페이지</title>
</head>
<body>
<form action="test06.jsp" method="post">
forward 액션으로 데이터를 전송하기<br>
<input type="text" name="msg">
<input type="submit" value="전송">
</form>
<hr>
<form action="test07.jsp" method="post">
response.sendRedirect() 액션으로 데이터를 전송하기<br>
<input type="text" name="msg">
<input type="submit" value="전송">
</form>
</body>
</html>
4. forward 방식
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward 액션</title>
</head>
<body>
<jsp:forward page="test08.jsp">
<jsp:param value="12345" name="test"/>
</jsp:forward>
<%-- forward 액션 태그를 활용하면
처음에 요청했던(전송했던) 데이터들이 유지됨
URL이 변경되지않음
== 진짜로 새로운 요청이 된것이아니라,
새로운 요청이(추가된 요청이)처리된것처럼 동작 --%>
</body>
</html>
5. sendRedirect 방식
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>response.sendRedirect()</title>
</head>
<body>
<%-- 데이터를 전달하기만 할 경우 HTML이 필요없음 --%>
<%
response.sendRedirect("test08.jsp");
// 처음에 전송한(요청한) 데이터가 유지 xxxxx
// URL이 변경됨
// == 새로운 요청이 처리됨
%>
</body>
</html>
6. 결과 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과 페이지</title>
</head>
<body>
<h1> msg : <%= request.getParameter("msg") %></h1>
<h1> test : <%= request.getParameter("test") %></h1>
</body>
</html>
GitHub
https://github.com/Qkrwnsgus0522/JSP
728x90