[JSP] 7.1 <jsp:forward> 액션 태그를 이용한 JSP 페이지 이동
2022. 4. 8. 15:19ㆍJAVA/Servlet&JSP
<jsp:forward>의 요청 흐름
- 웹 브라우저 요청이 from.jsp에 전달
- form.jsp는 <jsp:forward> 액션 태그를 실행
- <jsp:forward> 액션 태그가 실행되면 요청 흐름이 to.jsp로 이동한다.
- 요청 흐름이 이동할 때 from.jsp에서 사용한 request 기본 객체와 response 기본 객체가 to.jsp로 전달
- to.jsp는 응답 결과를 생성
- to.jsp가 생성한 결과를 웹 브라우저에게 전송
주목할점
- from.jsp가 아닌 to.jsp가 생성한 응답 결과가 웹 브라우저에게 전달
- from.jsp에서 사용한 request 기본객체와 response 기본객체가 to.jsp에 그대로 전달됨
1. <jsp:forward> 액션 태그
문법
<jsp:forward page="이동할 페이지"/>
01_from.jsp
<%@ 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>
이 페이지는 from.jsp가 생성한 것입니다.
<jsp:forward page="02_to.jsp" />
</body>
</html>
02_to.jsp
<%@ 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>
이 페이지는 to.jsp가 생성한 것입니다.
</body>
</html>
- from.jsp에서 <jsp:forward>를 사용해서 이동한 to.jsp가 생성한 결과가 웹 브라우저에 출력됨
- from.jsp에서 출력한 결과는 웹 브라우저에 출력되지 않음
- 웹 브라우저의 URL 주소는 from.jsp로써 최초로 요청을 받은 JSP의 주소가 됨
2. <jsp:forward> 액션 태그의 page 속성에서 지정할 경로의 표시
이동할 페이지 이동경로 입력 방식
- 웹 어플리케이션 폴더를 기준으로 한 절대 경로
- 현재 JSP 페이지를 기준으로 한 상대 경로
절대경로
<jsp:forward page="/to/to.jsp"/>
상대경로
<jsp:forward page="../to/to.jsp"/>
절대 경로 vs 상대 경로
- 절대 경로 입력 방식을 권장
3. <jsp:forward> 액션 태그와 출력 버퍼와의 관계
이전 예제에서 from.jsp 페이지의 생성 결과는 출력되지 않고 to.jsp에서 생성한 결과만 웹 브라우저에 출력된 것을 확인할 수 있었습니다. <jsp:forward> 액션 태그를 사용하는 JSP 페이지(from.jsp)의 출력 결과가 웹 브라우저에 전송되지 않은 이유는 출력 버퍼때문입니다.
<jsp:forward>와 출력 버퍼의 관계
- <jsp:forward> 액션 태그 실행시 기존 저장되어 있는 출력 버퍼를 비우기 때문에 from.jsp의 내용은 출력되지 않음
출력 버퍼가 없는 상태에서 <jsp:forward> 예제
<%@ page buffer="none" 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>
이 페이지는 from.jsp가 생성한 것입니다.
<jsp:forward page="02_to.jsp" />
</body>
</html>
4. <jsp:forward> 액션 태그의 전형적인 사용법
04_select.jsp
<%@ 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>
<form action="<%= request.getContextPath() %>/Chapter07/05_view.jsp">
보고싶은 페이지 선택:
<select name="code">
<option value="A">A페이지</option>
<option value="B">B페이지</option>
<option value="C">C페이지</option>
</select>
<input type="submit" value="이동">
</form>
</body>
</html>
- select 안에 페이지 선택시 05_view.jsp로 이동
view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String code = request.getParameter("code");
String viewPageURI = null;
if(code.equals("A"))
{
viewPageURI = "/Chapter07/viewModule/a.jsp";
}else if(code.equals("B"))
{
viewPageURI = "/Chapter07/viewModule/b.jsp";
}else if(code.equals("C"))
{
viewPageURI = "/Chapter07/viewModule/c.jsp";
}
%>
<jsp:forward page="<%= viewPageURI %>"></jsp:forward>
a.jsp, b.jsp, c.jsp
<%@ 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>
이 페이지는 <b><font size="5">A</font></b>입니다.
</body>
</html>
<%@ 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>
이 페이지는 <b><font size="5">B</font></b>입니다.
</body>
</html>
<%@ 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>
이 페이지는 <b><font size="5">C</font></b>C입니다.
</body>
</html>
5. 이동할 페이지에 정보 전달하기: 파라미터 전달 방법
<jsp:forward> 액션태그에 파라미터 설정 방법
<jsp:forward page="moveTo.jsp">
<jsp:param name="first" value="BK" />
<jsp:param name="second" value="Choi" />
</jsp:forward>
- name - 이동할 페이지에 전달될 파라미터 이름 (표현식 사용 불가)
- value - 이동할 페이지에 전달될 파라미터의 값 (표현식 사용 가능)
07_paramFrom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String value = request.getParameter("p1");
if(value==null)
{
value = "NOPARAM";
}
%>
<jsp:forward page="08_paramTo.jsp" >
<jsp:param name="p1" value="<%=value %>"/>
</jsp:forward>
08_paramTo.jsp
<%@ 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>
p1 파라미터 : <%=request.getParameter("p1") %>
</body>
</html>
http://localhost:8080/jsp2/Chapter07/param/07_paramFrom.jsp
6. 이동할 페이지 사이에 정보 전달하기: request 기본 객체 속성 사용
속성을 통한 값의 전달
- request 기본 객체는 한번의 요청에 대해서 유효하게 동작
- 한번의 요청을 처리하는데 사용되는 모든 JSP에서 공유됨
09_makeTime.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
Calendar cal = Calendar.getInstance();
request.setAttribute("time", cal);
%>
<jsp:forward page="/Chapter7/to/10_viewTime.jsp"/>
10_viewTime.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Calendar cal = (Calendar)request.getAttribute("time");
%>
현재 시간은 <%= cal.get(Calendar.HOUR) %>시
<%= cal.get(Calendar.MINUTE) %>분
<%= cal.get(Calendar.SECOND) %>초 입니다.
</body>
</html>
- makeTime.jsp에서 request 기본 객체에 속성 이름을 "time", 값을 Calendar 인스턴스를 저장합니다.
- viewTime.jsp로 이동하여 request 기본 객체를 통하여 Calendar 인스턴스를 참조
References
source code : https://github.com/yonghwankim-dev/JSP2.0/tree/master/jsp2/src/main/webapp/Chapter07
JSP 2.0 프로그래밍 기초부터 중급까지
'JAVA > Servlet&JSP' 카테고리의 다른 글
[JSP] 8.1 <jsp:include> 액션 태그를 이용한 페이지 모듈화 (0) | 2022.04.08 |
---|---|
[JSP] 7.2 리다이렉트와 자바 스크립트를 이용한 페이지 이동 (0) | 2022.04.08 |
[JSP] 6.5 에러 페이지의 우선 순위 및 에러 페이지 지정 형태 (0) | 2022.04.08 |
[JSP] 6.4 예외 종류별 에러 페이지 지정하기 (0) | 2022.04.08 |
[JSP] 6.3 에러 코드별 에러 페이지 작성하기 (0) | 2022.04.08 |