JSP 13. 액션태그
액션 태그
액션 태그(Action Tag)
- JSP 표준 태그
- 페이지 사이에서 이동을 제어하거나 자바빈을 생성할 때 주로 사용함.
- 특별한 선언없이 <jsp: 태그명 /> 형태로 사용함.
- 태그처럼 사용하지만 그 뒤에서는 JSP가 수행됨.
    - WAS에서 처리된 후 결과만 출력함.
 
액션 태그 특징
- XML 문법 따름
- 반드시 종료 태그를 사용해야 함.
- 액션 태그 사이에 주석을 사용하면 에러가 발생함.
- 액션 태그에 속성값을 부여할 때는 표현식(<%= %>)을 사용할 수 있음.
용도에 따른 구분
    <jsp:include></jsp:include>
    <jsp:forward></jsp:forward>
    <jsp:useBean></jsp:useBean>,<jsp:setProperty></jsp:setProperty>,
                                <jsp:getProperty></jsp:getProperty>
    <jsp:param></jsp:param>
- 외부 JSP 파일을 현재 JSP 파일로 포함시키는 기능
| include 지시어 | < jsp:include > 액션 태그 | |
|---|---|---|
| 형식 | <%@ include file=”포함할 파일의 경로”%> | < jsp:include page=”포함할 파일의 경로명” > | 
| 포함방식 | 페이지 자체를 현재 페이지에 포함시킨 후 컴파일 진행 | 실행의 흐름을 포함시킬 페이지로 이동시킨 후 실행한 결과를 현재 페이지에 포함시킴. | 
| 변수 | 포함시킨 파일에서 생성한 변수를 사용 가능 | 포함시킨 파일에서 생성한 변수 사용 불가 | 
| page 영역 | 공유됨 | 공유되지 않음 | 
| request 영역 | 공유됨 | 공유됨 | 
- outerPage1.jsp
	<h2>외부 파일1</h2>
	<% String newVar1 = "BOB's Blog"; %>
	<ul>
		<li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
		<li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
	</ul>
- outerPage2.jsp
	<h2>외부 파일2</h2>
	<% String newVar2 = "BOB's Programming"; %>
	<ul>
		<li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
		<li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
	</ul>
- includeMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 포함할 두 파일의 경로를 변수에 저장
	String outerPage1 = "./inc/outerPage1.jsp";
	String outerPage2 = "./inc/outerPage2.jsp";
	
	// Page영역과 request영역에 속성 저장
	pageContext.setAttribute("pAttr", "세종대왕");
	request.setAttribute("rAttr", "이순신");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>지시어와 액션태그 동작 방식 비교</title>
</head>
<body>
	<h2>지시어와 액션태그 동작 방식 비교</h2>
	
	<!-- 지시어 방식  -->
	<%@ include file="./inc/outerPage1.jsp" %>
	<p>외부 파일1 에 선언한 변수 : <%=newVar1 %></p>
	
	<!-- 액션 태그 -->
	<h3>액션 태그로 페이지 포함하기</h3>
	<jsp:include page="./inc/outerPage2.jsp" />
	<jsp:include page="<%= outerPage2 %>" />
	<p>외부 파일2 에 선언한 변수 : <%-- <%=newVar2 %> --%></p>	
						<!-- 존재하지 않으니 출력되지 않음 Err -->
</body>
</html>


- 포워드는 현재 페이지에 들어온 요청을 다음 페이지로 보내는 기능
- 포워드는 버퍼를 사용함
- 다음 페이지로 요청을 전달 하는 것이 목적
    - 이동된 페이지와 request 영역을 공유함
- URL이 변경되지 않는 특징이 있음.
 
- fowardMain.jsp
	<%@ page language="java" contentType="text/html; charset=UTF-8"
		pageEncoding="UTF-8"%>
	<%
		pageContext.setAttribute("pAttr", "이방원");
		request.setAttribute("rAttr", "이도");
	%>
	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="UTF-8">
	<title>액션 테그 - forward</title>
	</head>
	<body>
		<h2>액션 태그를 이용한 포워딩</h2>
		<jsp:forward page="forwardSub.jsp" />
	</body>
	</html>
- fowardSub.jsp
	<title>액션태그 - forward</title>
	</head>
	<body>
		<h2>포워드 결과</h2>
		<ul>
			<li>
				page영역 : <%=pageContext.getAttribute("pAttr") %>
			</li>
			<li>
				request영역 : <%=request.getAttribute("rAttr") %>
			</li>
		</ul>

, ,   
- 자바빈즈(JavaBeans)를 생성하거나 설정 할 때 사용
- 자바빈즈는 데이터를 저장하기 위한 멤버 변수, 게터/세터 메서드로만 이루어진 클래스.
    - 기본(default) 패키지 이외의 패키지에 속해 있어야 함.
- 멤버 변수(속성, 프로퍼티)의 접근 지정자는 private으로 선언함
- 기본 생성자가 잇어야 함.
- 멤버 변수에 접근할 수 있는 게터/세터 메서드 있어야 함.
- 게터/세터 메서드의 접근 지정자는 pubilc 이어야 함.
 
1) 자바빈즈 생성
 <jsp:useBean id="자바빈즈 이름" class="사용할 패키지와 클래스명" scope="저장 될 영역" />
- id : 자바빈즈 객체의 이름 지정
- class : 사용하려는 자바빈즈 객체의 실제 패키지명과 클래스명 지정
- scope : 자바진즈가 저장될 내장 객체 영역 지정
    - 생략한다면 기본값인 page 영역이 지정
 
자바빈즈 생성할 때는 기본 생성자 호출
- 기본생성자가 없다면 에러가 남
2) 멤버 변수 값 설정/추출
	<jsp:setProperty name="자바빈즈 이름" property="속성명(멤버 변수)" value="설정할 값" />
- name : userBean의 id속성에 지정한 자비빈즈 이름을 지정
    - 인스턴스 변수를 지정하는 것과 동일
 
- property : 자바빈즈의 멤버 변수명
- value : 멤버 변수에 설정할 값 지정
	<jsp:getProperty name="자바빈즈 이름" property="속성명(멤버 변수)" />
- UseBeanMain.jsp
	<%@page import="kr.co.ezenac.bean.Person"%>
	<%@ page language="java" contentType="text/html; charset=UTF-8"
		pageEncoding="UTF-8"%>
	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="UTF-8">
	<title>액션 태그 - UseBean</title>
	</head>
	<body>
		<h2>UseBean 액션 태그</h2>
		<h3>자바빈즈 생성하기</h3>
		<jsp:useBean id="person" class="kr.co.ezenac.bean.Person" scope="request" />
		
		
		<!-- 액션 태그로 자바빈즈를 생성할 때는 기본 생성자를 사용하고,
			값을 설정할때는 세터 , 값을 추출할때는 게터 메서드를 사용함. -->
		<h3>액션태그로 자바빈즈 속성 지정하기</h3>
		<jsp:setProperty property="name" name="person" value="정도전" />
		<jsp:setProperty property="age" name="person" value="40" />
		
		<h3>액션테그로 자바빈즈 속성 지정하기</h3>
		<ul>
			<li>이름 : <jsp:getProperty property="name" name="person"/></li>
			<li>나이 : <jsp:getProperty property="age" name="person"/></li>
		</ul>
	</body>
	</html>

3) 와일드카드 (*)로 폼값 한번에 설정
- 
    property 속성에 와일드카드를 사용하면 <form> 태그를 통해 전송되는 모든 폼값을 한번에 자바빈즈에 입력할 수 있음. 
- 
    UseBeanForm.jsp 
	<body>
		<h2>액션 태그로 폼값 한 번에 받기</h2>
		<form method="post" action="useBeanAction.jsp">
			이름 : <input type="text" name="name" /><br>
			나이 : <input type="text" name="age" />
			<input type="submit" value="폼값 전송" />
		</form>
	</body>
- UseBeanAction.jsp
<body>
	<h3>액션 태그로 폼값 한 번에 받기</h3>
	<jsp:useBean id="person" class="kr.co.ezenac.bean.Person" />
	<jsp:setProperty property="*" name="person"/>
	
	<ul>
		<li>이름 : <jsp:getProperty property="name" name="person"/> </li>
		<li>나이 : <jsp:getProperty property="age" name="person"/> </li>
	</ul>
</body>


- paramMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
	String pValue = "대한민국";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
	<jsp:useBean id="oerson" class="kr.co.ezenac.bean.Person" scope="request" />
	<jsp:setProperty property="name" name="person" value="이순신"/>
	<jsp:setProperty property="age" name="person" value="42"/>
	<jsp:forward page="paramForward.jsp?param1=류현진">
		<jsp:param value="경기도 용인시" name="param2"/>
		<jsp:param value="<%=pValue %>" name="param3"/>
	</jsp:forward>
</body>
</html>
- paramForward.jsp
<body>
	<jsp:useBean id="person" class="kr.co.ezenac.bean.Person" scope="request" />
	<h2>포워드된 페이지에서 매개변수 확인</h2>
	<ul>
		<li><jsp:getProperty property="name" name="person"/> </li>
		<li>나이 : <%= request.getParameter("param1") %> </li>
		<li>나이 : <%= request.getParameter("param2") %> </li>
		<li>나이 : <%= request.getParameter("param3") %> </li>
	</ul>
</body>

jsp:param
- 다른 페이지로 매개변수를 전달함.
- jsp:include, jsp:forward 액션 태그와 함께 사용
- 
    페이지 사이의 매개변수는 모두 request 영역에 생성됨. 
- paramFoward.jsp
	<!-- include한 jsp페이지와는 변수를 직접 공유 불가 -->
	<jsp:include page="inc/paramInclude.jsp"  >
		<jsp:param value="경기도 양평군" name="Loc1"/>
		<jsp:param value="용문면" name="Loc2"/>
	</jsp:include>
	<!-- jsp:param include한 페이지로도 매개변수 전달 가능 -->
- inc/paramInclude.jsp
	<%@ page language="java" contentType="text/html; charset=UTF-8"
		pageEncoding="UTF-8"%>
	<h2>인클루드된 페이지에서 매개변수 확인</h2>
	<%=request.getParameter("Loc1") %>에
	<%=request.getParameter("Loc2") %>이있습니다.

댓글남기기