07 액션 태그(Action Tag)

알재·2023년 6월 28일
0

JSP & Servlet

목록 보기
7/16

7.1 액션 태그란?

페이지 사이에서 이동을 제어하거나 자바빈을 생성할 때 주로 사용.

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

7.2 <jsp:include>

지시어액션 태그
형식<%@ include file="포함할 파일의 경로" %><jsp:include page="포함할 파일의 경로" />
표현식표현식 사용 불가표현식 사용 가능
포함 방식페이지 자체를 현재 페이지에 포함시킨 후 컴파일 진행실행의 흐름을 포함시킬 페이지로 이동시킨 후 실행한 결과를 현재 페이지에 포함시킴
변수포함시킨 파일에서 생성한 변수 사용 가능포함시킨 파일에서 생성한 변수 사용 불가
page 영역공유됨공유되지 않음
request 영역공유됨공유됨

7.2.2 포함될 외부 파일 준비

OuterPage1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>OuterPage</title>
</head>
<body>
    <h2>외부 파일 1</h2>
    <%
    String newVar1 = "고구려 세운 동명왕";
    %>
    <ul>
        <li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
        <li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
    </ul>
</body>
</html>
OuterPage2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>OuterPage</title>
</head>
<body>
    <h2>외부 파일 2</h2>
    <%
    String newVar2 = "백제 온조왕";
    %>
    <ul>
        <li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
        <li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
    </ul>
</body>
</html>

7.2.3 포함 방식에 따른 차이 확인

IncludeMain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// 포함할 파일의 경로
String outerPath1 = "./inc/OuterPage1.jsp";
String outerPath2 = "./inc/OuterPage2.jsp";

// page 영역과 request 영역에 속성 저장 
pageContext.setAttribute("pAttr", "동명왕");
request.setAttribute("rAttr", "온조왕");
%>
<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>

외부 파일 1은 지시어 방식을 통한 페이지 포함 이고 외부파일 2는 액션 태그를 사용한 페이지 포함이다.

7.3 <jsp:forward>

다음 페이지로 요청을 전달하는 것이 목적이므로 이동한 페이지와 request 영역을 공유한다
버퍼를 사용하지 않도록 하였다면 사용할수 없다.

ForwardMain.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="/07ActionTag/ForwardSub.jsp" /> 
</body>
</html>
ForwardSub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>

7.4 <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>

7.4.1 자바 빈즈 생성

<jsp:useBean id="자바빈즈 이름" class="사용할 패키지와 클래스명" scope="저장될 영역" />
  • id : 자바빈즈 객체의 이름을 지정. 같은 id로 이미 생성된 객체가 있다면 해당 객체를 사용하고, 없다면 새로 성성.
  • class : 자바빈즈 객체의 셀제 패키지명과 클래스명을 지정.
  • scope : 자바빈즈가 저장될 내장 객체 영역을 지정. 기본값은 page 영역이다.


7.4.2 멤버 변수 값 설정/추출

<jsp:setProperty name="자바빈즈 이름" property="속성명(멤버 변수)" value="설정할 값" />
  • name : <jsp:useBean>의 id 속성에 지정한 자바빈즈의 이름을 지정.
  • property : 자바빈즈의 멤버 변수명을 지정. property="*" 라고 쓰면 form의 하위요소와 일치하는 자바빈즈의 모든 속성에 사용자가 전송한 값이 설정. 이 때 value 속성을 생략할 수 있다.
  • value : 멤버 변수에 설정할 값을 지정.

<jsp:getProperty name="자바빈즈 이름" property="속성명(멤버 변수)" />




UseBeanMain.jsp

<%@ 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="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>

7.4.3 와일드카드로 폼값 한 번에 설정하기

UseBeanForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>액션 태그 - UseBean</title></head>
<body>
    <h2>액션 태그로 폼값 한 번에 받기</h2> 
    <form method="post" action="UseBeanAction.jsp"> 
        이름 : <input type="text" name="name" /> <br /> 
        나이 : <input type="text" name="age" /> <br /> 
        <input type="submit" value="폼값 전송" />
    </form>
</body>
</html>
UseBeanAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head><title>액션 태그 - UseBean</title></head>
<body>
    <h3>액션 태그로 폼값 한 번에 받기</h3>
    <jsp:useBean id="person" class="common.Person" />  
    <jsp:setProperty property="*" name="person" />  
    <ul>
        <li>이름 : <jsp:getProperty name="person" property="name" /></li>  
        <li>나이 : <jsp:getProperty name="person" property="age" /></li> 
    </ul>
</body>
</html>

7.5 <jsp:param>

7.5.1 포워드되는 페이지로 매개변수 전달하기

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="person" class="common.Person" scope="request" />
    <jsp:setProperty name="person" property="name" value="김삿갓" /> 
    <jsp:setProperty name="person" property="age" value="56" /> 
    <jsp:forward page="ParamForward.jsp?param1=김병연"> 
        <jsp:param name="param2" value="경기도 양주" />
        <jsp:param name="param3" value="<%=pValue%>" />
    </jsp:forward> 
</body>
</html>
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>
</body>
</html>

7.5.2 인클루드되는 페이지로 매개변수 전달하기

ParamForward.jsp

<jsp:include page="inc/ParamInclude.jsp">
        <jsp:param name="loc1" value="강원도 영월" />
        <jsp:param name="loc2" value="김삿갓면" />
</jsp:include>

profile
저장소

0개의 댓글

관련 채용 정보