자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 21. 액션 태그(Action Tag) - <jsp:param>

개발학생 2023. 12. 23. 15:06
반응형

*<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>

 

  1. setCharacterEncoding() 메소드를 이용해 UTF-8로 인코딩
    → 포워드되는 페이지로 한글을 전달할 때는 반드시 포워드시키는 최초 페이지에서 인코딩 처리를 해야 함 (우리는 web.xml에 필터를 설정했으므로 생략 가능)
  2. request 영역에 저장할 자바빈즈를 생성
  3. 2.를 통해, 멤버 변수 name과 age의 값 설정
  4. <jsp:forward> 액션 태그로 ParamForward.jsp로 포워딩 & 쿼리스트링으로 param1 매개변수 전달
  5. <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>
  1. <jsp:useBean> 액션 태그로, 이전 페이지에서 request 영역에 저장한 자바빈즈를 가져옴
  2. <jsp:getProperty> 액션 태그로 멤버 변수의 값을 가져와 출력
  3. 핵심: 매개변수로 전달된 값 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") %>이 있습니다.
</>
  1. 매개변수로 전달된 loc1과 loc2를 화면에 출력
    → ParamInclude.jsp가 ParamForward.jsp에 포함되게 하며, 이때 매개변수로 전달된 두 값이 화면에 출력

 

3) 다시 ParamMain.jsp 파일을 [Run As] → [Run On Server]로 실행한 결과

  • 인클루드된 ParamInclude.jsp에서도 매개변수로 전달된 두 값이 제대로 출력되고 있음
    → <jsp:param> 액션 태그로, 인클루드하거나 포워드한 페이지로 매개변수를 전달 가능하기 때문

 

*액션 태그의 동작 매커니즘

  • 전달 방식과 상관없이, 매개변수들이 모두 request 영역에 생성되어 항상 request.getParameter()로 값을 가져오고 있음
    → request 영역은 하나의 요청을 처리하는 과정에서, 거쳐가는 모든 페이지에서 공유하는 공간이기 때문 (페이지 사이의 매개변수는 모두 request 영역에 생성됨)

 

 

반응형