JSP/Servlet/4. 페이지 모듈화와 요청 흐름 제어

Day 53 : <jsp:forward> 액션 태그를 이용한 JSP 페이지 이동

pancakemaker 2021. 12. 30. 16:14

1. <jsp:forward> 액션 태그

: 하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리 전달 시 사용

: from.jsp가 아닌 to.jsp가 생성한 응답 결과를 웹 브라우저에 전달

: from.jsp에서 사용한 request, response 기본 객체를 to.jsp에 그대로 전달

<jsp:forward page="이동할 페이지" />

2. <jsp:forward> 액션 태그 사용

 

- /from/from.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--
	<jsp:forward> 액션 태그를 실행하면
	생성했던 출력 결과는 모두 제거된다.
--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>from.jsp의 제목</title>
</head>
<body>
이 페이지는 from.jsp가 생성한 것 입니다.

<jsp:forward page="/to/to.jsp" />

</body>
</html>

- /to/to.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--
	<jsp:forward> 액션 태그를 실행하면
	생성했던 출력 결과는 모두 제거된다.
--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>from.jsp의 제목</title>
</head>
<body>
이 페이지는 from.jsp가 생성한 것 입니다.

<jsp:forward page="/to/to.jsp" />

</body>
</html>


3. <jsp:forward> 액션 태그의 활용

 

- select.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>옵션 선택 화면</title>
</head>
<body>
<form action="<%= request.getContextPath() %>/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>

- 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 = "/viewModule/a.jsp";
	} else if(code.equals("B")) {
		viewPageURI = "/viewModule/b.jsp";
	} else if(code.equals("C")) {
		viewPageURI = "/viewModule/c.jsp";
	}
%>
<jsp:forward page="<%= viewPageURI %>" />

- /viewModule/a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>A 페이지</title>
</head>
<body>
이 페이지는 <b><font size="5">A</font></b> 입니다.
</body>
</html>

- /viewModule/b.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>B 페이지</title>
</head>
<body>
이 페이지는 <b><font size="5">B</font></b> 입니다.
</body>
</html>

- /viewModule/c.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>C 페이지</title>
</head>
<body>
이 페이지는 <b><font size="5">C</font></b> 입니다.
</body>
</html>


4. 기본 객체의 속성을 이용해서 값 전달

: from.jsp와 to.jsp는 하나의 request 기본 객체를 공유

: from.jsp에서 request 기본 객체에 새로운 속성을 추가하면 to.jsp는 그 속성을 읽어와 사용

→ from.jsp에서 to.jsp로 값 전달 가능

 

- /from/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="/to/viewTime.jsp" />

- /to/viewTime.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.util.Calendar" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>현재 시간</title>
</head>
<body>
<%
	Calendar cal = (Calendar) request.getAttribute("time");
%>
현재 시간은 <%= cal.get(Calendar.HOUR) %>시
		<%= cal.get(Calendar.MINUTE) %>분
		<%= cal.get(Calendar.SECOND) %>초 입니다.
</body>
</html>