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>