반응형
*<jsp:param>이란
- <jsp:include>나 <jsp:forward>를 사용할 때 다른 페이지에 값을 전달해주는 액션 태그
- 전달할 수 있는 값은 String 뿐
- 다른 타입의 객체를 전달할 때는 내장 객체의 영역을 이용해야 함
*포워드와 포함 관계로 연결된 3개 페이지를 만들어,
세 페이지들 사이에서 데이터를 공유하는 다양한 방법 확인
1. 포워드되는 페이지로 매개변수 전달하기
1) 메인 페이지(포워드하는 페이지)
- 프로젝트의 WebContent 폴더 → ActionTag 폴더에 ParamMain.jsp 파일 생성
// WebContent/ActionTag/ParamMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8"); //1.
String pValue = "방랑시인";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
<jsp:useBean id="person" class="common.Person" scope="request" /> //2.
//3.(아래 코드 2줄)
<jsp:setProperty name="person" property="name" value="김삿갓" />
<jsp:setProperty name="person" property="age" value="56" />
//4.(아래 코드 3줄)
<jsp:forward page="ParamForward.jsp?param1=김병연">
<jsp:param name="param2" value="경기도 양주" />
<jsp:param name="param3" value="<%=pValue%>" />
</jsp:forward>
</body>
</html>
- setCharacterEncoding() 메소드를 이용해 UTF-8로 인코딩
→ 포워드되는 페이지로 한글을 전달할 때는 반드시 포워드시키는 최초 페이지에서 인코딩 처리를 해야 함 (우리는 web.xml에 필터를 설정했으므로 생략 가능) - request 영역에 저장할 자바빈즈를 생성
- 2.를 통해, 멤버 변수 name과 age의 값 설정
- <jsp:forward> 액션 태그로 ParamForward.jsp로 포워딩 & 쿼리스트링으로 param1 매개변수 전달
- <jsp:param> 액션 태그로 매개변수 param2와 param3 전달
2) 포워드되는 페이지
- 프로젝트의 WebContent 폴더 → ActionTag 폴더에 ParamForward.jsp 파일 생성
// WebContent/ActionTag/ParamForward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
<jsp:useBean id="person" class="common.Person" scope="request" /> //1.
<h2>포워드된 페이지에서 매개변수 확인</h2>
<ul>
//2.(아래 코드 2줄)
<li><jsp:getProperty name="person" property="name" /></li>
<li>나이 : <jsp:getProperty name="person" property="age" /></li>
//3.(아래 코드 3줄)
<li>본명 : <%= request.getParameter("param1") %></li>
<li>출생 : <%= request.getParameter("param2") %></li>
<li>특징 : <%= request.getParameter("param3") %></li>
</ul>
</body>
</html>
- <jsp:useBean> 액션 태그로, 이전 페이지에서 request 영역에 저장한 자바빈즈를 가져옴
- <jsp:getProperty> 액션 태그로 멤버 변수의 값을 가져와 출력
- 핵심: 매개변수로 전달된 값 3개 출력
→ 쿼리스트링으로 전달한 매개변수와 <jsp:param> 액션 태그로 전달한 매개변수를, 구분 없이 모두 request내장 객체의 getParameter() 사용
3) ParamMain.jsp 파일을 [Run As] → [Run On Server]로 실행한 결과
- 포워드 이전의 내용은 삭제되고, 포워드된 ParamForward.jsp의 내용이 화면에 출력됨
2. 인클루드되는 페이지로 매개변수 전달하기
1) 다른 페이지를 인클루드하고 매개변수 전달
- 프로젝트의 WebContent 폴더 → ActionTag 폴더 속 ParamForward.jsp 파일에 코드 추가
- → ParamInclude.jsp를 인클루드하고, 매개변수 loc1과 loc2를 전달
// WebContent/ActionTag/ParamForward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
<jsp:useBean id="person" class="common.Person" scope="request" />
<h2>포워드된 페이지에서 매개변수 확인</h2>
<ul>
<li><jsp:getProperty name="person" property="name" /></li>
<li>나이 : <jsp:getProperty name="person" property="age" /></li>
<li>본명 : <%= request.getParameter("param1") %></li>
<li>출생 : <%= request.getParameter("param2") %></li>
<li>특징 : <%= request.getParameter("param3") %></li>
</ul>
//아래 4줄의 코드 추가
<jsp:include page="inc/ParamInclude.jsp">
<jsp:param name="loc1" value="강원도 영월" />
<jsp:param name="loc2" value="김삿갓면" />
</jsp:include>
</body>
</html>
2) 인클루드되는 페이지를 inc 폴더 안에 추가
- 프로젝트의 WebContent 폴더 → ActionTag 폴더에서 inc 폴더 생성 → ParamInclude.jsp 파일 생성
// WebContent/ActionTag/Inc/ParamInclude.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h2>인클루드된 페이지에서 매개변수 확인</h2>
//1.아래 코드 2줄
<%= request.getParameter("loc1") %>에
<%= request.getParameter("loc2") %>이 있습니다.
</>
- 매개변수로 전달된 loc1과 loc2를 화면에 출력
→ ParamInclude.jsp가 ParamForward.jsp에 포함되게 하며, 이때 매개변수로 전달된 두 값이 화면에 출력
3) 다시 ParamMain.jsp 파일을 [Run As] → [Run On Server]로 실행한 결과
- 인클루드된 ParamInclude.jsp에서도 매개변수로 전달된 두 값이 제대로 출력되고 있음
→ <jsp:param> 액션 태그로, 인클루드하거나 포워드한 페이지로 매개변수를 전달 가능하기 때문
*액션 태그의 동작 매커니즘
- 전달 방식과 상관없이, 매개변수들이 모두 request 영역에 생성되어 항상 request.getParameter()로 값을 가져오고 있음
→ request 영역은 하나의 요청을 처리하는 과정에서, 거쳐가는 모든 페이지에서 공유하는 공간이기 때문 (페이지 사이의 매개변수는 모두 request 영역에 생성됨)
반응형