728x90
Forward
웹 어플리케이션에서 서버 측에서 클라이언트에게 페이지를 전송하는 방법 중 하나로
주로 서버에서 다른 JSP 페이지 또는 서블릿으로 제어를 넘길 때 사용됨
forward를 사용하면 웹 어플리케이션의 다른 구성 요소로 요청을 전달할 수 있으며, 코드 재사용성과 모듈성을 높일 수 있음
forward 동작 원리
- 클라이언트가 서버로 요청을 보냄
- 서버는 해당 요청을 받고 처리 중에 다른 서블릿 또는 JSP 페이지로 제어를 넘기고, 클라이언트에게는 새로운 URL이 표시되지 않음
- 다른 서블릿 또는 JSP 페이지가 요청을 처리하고 응답을 생성함
- 응답이 클라이언트에게 전달되어 화면에 표시됨
Redirect
웹 어플리케이션에서 클라이언트의 요청을 새로운 URL로 재전송하는 매커니즘
주로 사용자를 다른 페이지로 보낼 때 사용함
Redirect 동작 원리
- 클라이언트가 서버에 요청을 보냄
- 서버는 요청을 받아 처리하며, 새로운 URL로 이동해야 함을 클라이언트에게 알림
- 이것은 HTTP 응답 헤더에 302 Redirect 와 함께 새로운 URL을 포함하여 이루어짐
- 클라이언트는 서버의 응답을 받고, 새로운 URL로 새로운 요청을 보냄
- 서버는 새로운 URL에 해당하는 페이지를 실행하고, 요청을 처리하여 응답을 생성함
- 클라이언트의 브라우저는 서버에서 받은 응답을 표시하고, 새로운 URL 페이지를 표시함
Forward, Redirect 차이점
Forward | Redirect |
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 : redirect
<%@ 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>
728x90
'Web > JSP' 카테고리의 다른 글
[JSP] Application과 Out (0) | 2023.07.02 |
---|---|
[JSP] session을 활용하여 쇼핑몰 만들기 (실습) (0) | 2023.07.02 |
[JSP] 웹 개발에서 Session (0) | 2023.07.01 |
[JSP] 에러페이지 (0) | 2023.07.01 |
[JSP] JSP란 ? (0) | 2023.06.29 |