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") %>이있습니다.
댓글남기기