2022년 6월 21일 화요일

JSP 7강 - 액션 태그(Action Tag)

 1. 액션 태그란?

JSP 코드를 HTML 태그와 같은 형태로 간단히 사용할 수 있는 태그.

액션 태그는 일반 JSP 코드 보다 HTML에 더 조화롭게 스며들고 간결함.

액션 태그의 특징

  • XML 문법을 따름
  • 반드시 종료 태그를 사용해야 함
  • 액션 태그 사이에 주석을 사용하면 에러가 발생함
  • 액션 태그에 속성 값을 부여할 때는 표현식 <%= %>을 사용할 수 있음

액션 태그는 용도에 따르게 4가지로 나눔
  • <jsp:include> : 외부 파일을 현재 파일에 포함 시킨다.
  • <jsp:forward> : 다른 페이지로 요청을 넘긴다.
  • <jsp:useBean>,<jsp:setProperty>,<jsp:getProperty> : 자바 빈즈를 생성, 값을 설정/추출한다.
  • <jsp:param> : 인클루드나 포워드시 매개변수를 전달한다.

2. <jsp:include> : 외부 JSP 파일을 현재 JSP 파일로 포함시키는 기능

---include 지시어와 <jsp:include> 액션 태그 비교---

include 지시어
형식 : <%@include file="포함할 파일의 경로"%>
표현식 : 표현식 사용 불가
포함 방식 : 페이지 자체를 현재 페이지로 포함시킨 후 컴파일 진행
변수 : 포함시킨 파일에서 생성한 변수 사용 진행
page 영역 : 공유됨
request 영역 : 공유됨

<jsp:include> 액션 태그

형식 : <jsp:include page="포함할 파일의 경로" />
표현식 : 표현식 사용 가능
포함 방식 : 실행의 흐름을 포함시킬 페이지로 이동 후 실행한 결과를 현재 페이지에 포함
변수 : 포함시킨 파일에서 생성한 변수 사용 불가
page 영역 : 공유되지 않음
request 영역 : 공유됨
--예제 코드--
<html>
<head><title>지시어와 액션 태그 동작 방식 비교</title></head>
<body>
    <h2>지시어와 액션 태그 동작 방식 비교</h2>
    <!-- 지시어 방식 -->
    <h3>지시어로 페이지 포함하기</h3>
    <%@ include file="./inc/OuterPage1.jsp"%>
    <%--@ include file="<%=outerPath1OuterPage1%>" --%>
    <p>외부 파일에 선언한 변수 : <%=newVar1%></p>

    <!-- 액션 태그 방식 -->
    <h3>액션 태그로 페이지 포함하기</h3>
    <jsp:include page="./inc/OuterPage2.jsp" />
    <jsp:include page="<%=outerPath2%>" />
    <p>외부 파일에 선언한 변수 : <%--=newVar2 --%></p>
</body>
</html>


3. <jsp:forward> : 현재 페이지에 들어온 요청을 다음 페이지로 보내는 기능

<jsp:forward> 액션 태그를 만나기까지의 모든 출력을 제거하고 포워드할 페이지로 요청을 전달한다. 
포워드는 버퍼와 밀접하며, 버퍼를 사용하지 않으면 포워드는 사용할 수 없다.
포워드는 요청 전달이 목적이므로 이동 된 페이지와 request 영역을 공유 한다. 
그리고 URL이 변경되지 않는다.
--예제 코드( 포워드 하는 페이지) --
<%
pageContext.setAttribute("pAttr", "김유신"); 
request.setAttribute("rAttr", "계백"); 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - forward</title>
</head>
<body>
    <h2>액션 태그를 이용한 포워딩</h2> 
    <jsp:forward page="/07ActionTag/ForwardSub.jsp" /> 
</body>
</html>
--예제 코드( 포워드 되는 페이지 ForwardSub.jsp) --
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - forward</title>
</head>
<body>
    <h2>포워드 결과</h2>
    <ul>
        <li>
            page 영역 : <%= pageContext.getAttribute("pAttr") %>
        </li>
        <li>
            request 영역 : <%= request.getAttribute("rAttr") %> 
        </li>
    </ul>
</body>
</html>

4. <jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>: 자바빈즈는 데이터를 저장하기 위한 멤버 변수(속성)과 세터/게터 메스드로만 이루어진 클래스

---자바빈즈의 개발 규약---
  • 자바빈즈는 기본 패키지 이외의 패키지에 속해 있어야 한다.
  • 멤버 변수(속성, 프로퍼티)의 접근 지정자는 private 으로 선언한다.
  • 기본 생성자가 있어야 한다.
  • 멤버 변수에 접근할 수 있는 게터/세터 메서드가 있어야 한다.
  • 게터/세터 메서드의 접근 지정자는 public 으로 선언한다.
1) 자바빈즈 생성
<jsp:useBean id="자바빈즈 이름" class="사용할 패키지와 클래스명" scope="저장될 영역" />
  • id: 자바빈지 객체의 이름을 지정한다. 같은 id로 이미 생성된 객체가 있다면 해당 객체를 사용하고, 아직 없다면 새로 생성한다.
  • class: 사용하려는 자바빈즈 객체의 실제 패키지명과 클래스명을 지정한다. 
  • scope: 자바빈즈가 저장될 내장 객체 영역을 지정한다. 생략하면 기본값인 page 영역이 지정된다. 
2) 멤버 변수 값 설정
<jsp:setProperty name="자바빈즈 이름" property="속성명(멤버 변수) value="설정할 값"/>
  • name: <jsp:uesBean>의 id 속성에 지정한 자바빈즈의 이름을 지정한다.
  • property: 자바빈즈의 멤버 변수명을 지정한다. 이름을 명시하는 대신 property="*" 라고 쓰면 form의 하위 요소와 일치하는 자바빈즈의 모든 속성에 전송한 값이 설정된다.
  • value: 멤버 변수에 설정할 값을 지정한다.
3) 멤버 변수 값 추출
<jsp:getProperty name="자바빈즈 이름" property="속성명(멤버 변수) />
각 속성의 의미는 위와 같다.
--예제코드--
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - UseBean</title>
</head>
<body>
    <h2>useBean 액션 태그</h2>
    <h3>자바빈즈 생성하기</h3>
    <jsp:useBean id="person" class="common.Person" scope="request" />

    <h3>setProperty 액션 태그로 자바빈즈 속성 지정하기</h3>
    <jsp:setProperty name="person" property="name" value="임꺽정" /> 
    <jsp:setProperty name="person" property="age" value="41" /> 

    <h3>getProperty 액션 태그로 자바빈즈 속성 읽기</h3>
    <ul>
        <li>이름 : <jsp:getProperty name="person" property="name" /></li> 
        <li>나이 : <jsp:getProperty name="person" property="age" /></li> 
    </ul>
</body>
</html>

5. <jsp:param> : 다른 페이지에 값을 전달해주는 액션 태그. 전달할 수 있는 값은 String 뿐. 다른 타입의 객체를 전달 할 때는 내장 객체의 영역을 이용해야 한다.

1) 포워드 되는 페이지로 매개변수 전달하기
<%
request.setCharacterEncoding("UTF-8"); //한글 전달을 위해 UTF-8로 설정
String pValue = "방랑시인";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
    //request 영역에 저장할 자바빈즈 생성
    <jsp:useBean id="person" class="common.Person" scope="request" />

    //멤버 변수 name, age 값의 설정
    <jsp:setProperty name="person" property="name" value="김삿갓" /> 
    <jsp:setProperty name="person" property="age" value="56" /> 

    //ParamForward.jsp 으로 포워딩 하면서 쿼리 스트링으로 param1 매개변수 함께 전달
    <jsp:forward page="ParamForward.jsp?param1=김병연"> 
          //jsp:param 속성으로 param2와 param2 매개변수 전달
        <jsp:param name="param2" value="경기도 양주" />
        <jsp:param name="param3" value="<%=pValue%>" />
    </jsp:forward> 
</body>
</html>

2) 포워드 되는 페이지 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - param</title>
</head>
<body>
     //이전 페이지에서 request 영역에 저장한 자바빈즈를 가져온다.
    <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> 

        //<jsp:param> 액션 태그로 전달된 매개 변수 출력
        <li>출생 : <%= request.getParameter("param2") %></li>
        <li>특징 : <%= request.getParameter("param3") %></li>
    </ul>
</body>
</html>



댓글 없음:

댓글 쓰기