[Action Tag]

다시정리 !!!!

중요한거 위주로!!

페이지와 페이지 사이의 제어 이동이나 자바빈(좁은  의미) 등을 사용하는데 이용

Action태그의 각 속성값에는 표현식<%= %> 을 이용해 값 설정이 가능

소스보기시 서버측(WAS서버)에서 해석되어 액션태그가 보이지 않음

 

종류 총 6가지가 있음 

<jsp:include>

<jsp:forward>

<jsp:useBean>

<jsp:setProperty>  세터

<jsp:getProperty> 게터

<jsp:param>

 

이거먼저 정리 했어야 했는데... 

정리가 섞였음 ㅠㅠㅠ 망했다...

 

급한대로..

1. <jsp:include  >

 속성이 page/flush 두 가지가 있다!

page는 모듈화 할 페이지경로를 표현할 때 ("경로")

flush는 포함할 jsp페이지를 실행하기전에 출력버퍼에 현재까지의 내용을 보낼거인지 아닌지의 여부("ture/false")

  한방에 이해가능한 예시 

 <%
String content=request.getParameter("name");
%>
<jsp:include page="<%=content %>" flush="false"/>

요렇게 표현식 가능! 

간단하게는 

   <jsp:include page="top.jsp" flush="false"/> 

바로 경로 쓰는것도 됨 

 

 

<jsp:태그명>으로 표현한다.

Action태그의 각 속성값에는 표현식을 이용해 값을 설정 할 수도 있다.
단,지시어에는 불가 하다!  엑션태그 안에는 표현식만 사용이 가능하다.

반.드.시. 종.료.태.그.를 사용해야 함

서블릿으로 변환 될 때 자바코드로 변환이 된다 !!  어려워보이는데 신기

 

<jsp:include page="포함될페이지경로" />

page에는 절대경로/상대경로 다 적용되나 절대경로시에는 컨텍스트 루트 경로 제외

request객체 공유함...  (이동해도 request 객체가 사라지지 않음 !!)

 

※ include 지시어와 <jsp:include>액션 태그의 차이점

include 지시어는 다른 jsp로 흐름제어를 이동시켜 결과물을 현재 위치에 포함시키는 방식 

액션태그는 다른 파일의 내용을 현재위치로 삽입시킨 후 jsp파일을 자바파일로 변환하고 컴파일 하는 방식

지시어가 진정 통채로 들어오는거 임 !! 같은 페이지라고 생각하면 됨

지시어는 주로 변수를 공유하는 경우 변수선언할 때 주로 사용하고 액션태그는 레이아웃을 모듈화 할 때(정적컨텐츠로 이루어진 페이지에) 사용한다 !

include지시어의 file속성에는 표현식 사용불가
 include액션태그의 page속성에는 표현식 사용가능 단,표현식을 사용할때는 page속성에 표현식만 와야한다.

 

[예제 1. IncludeAcitonTag]  : 삽입시키기

include당할(?) 페이지 !

//우선 페이지 상단에 변수와 속성저장
<%
	// 페이지명 변수에 저장
	String directivePath="DirectivePage.jsp";
	String actionPath="ActionTagPage.jsp";
	//페이지 및 리퀘스트 영역에 속성저장
	pageContext.setAttribute("pageVar","페이지영역 입니다.");
	request.setAttribute("requestVar","리퀘스트영역 입니다.");
%>

 

<fieldset class=" form-group border p-3">
<legend class="w-auto px-3">include지시어와 &lt;include&gt; 액션태그</legend>		
		 
         <!-- file속성에 표현식 사용불가 -->
		 <!--  <--%@ include file="<--%=DirectivePage %>" %>  이거 안된다고!! -->
		 
		 <%@ include file="DirectivePage.jsp" %> <!-- 원래 이렇게 써왔던거고 -->
		 
		 <!-- page 속성에 표현식 가능 -->
		 <jsp:include page="<%=actionPath %>"/> 		 
		 
		 <h2>삽입된 페이지 안에서 선언한 변수 사용하기</h2>
		 directiveString : <%=directiveString %>
		 <!-- include 액션태그로 포함 된 페이지에서 선언한 변수는 사용불가!! 
		 					실행결과만 포함됨 -->
		 
		  actionString : <%--=actionString --%>
	
		</fieldset>

 

2.include지시어의 파일 속성으로 파일 삽입해봄 페이지 작성

DirectivePage.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- DirectivePage.jsp -->
<%
	//독립적인 서블릿으로 변환 안됨
	//즉 페이지 삽입이 되서 서블릿으로 변환되므로 같은 페이지 이다.
	//변수선언
	String directiveString="지시어로 삽입 된 페이지 안에서 선언 된 변수";


%>
<hr/>
<h4>DirectivePage.jsp 페이지 입니다.</h4>
<ul class="list=unsytled">
   <li>PAGE SCOPE:<%=pageContext.getAttribute("pageVar") %></li> 
   <li>REQUEST SCOPE:<%=request.getAttribute("requestVar") %></li> 

</ul>

 

 

3.액션태그의 page속성으로 !

ActionTagPage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--ActionTagPage.jsp -->
<%
	//이 페이지는 서블릿으로 변환
	//즉 다른페이지
	//실행결과가 페이지에 포함된다.
	//request영역을 공유함
	//변수선언
	String actionString="액션태그로 삽입 된 페이지 안에서 선언 된 변수";


%>
<hr/>
<h4>ActionTagPage.jsp 페이지 입니다.</h4>
<ul class="list=unsytled">
   <li>PAGE SCOPE:<%=pageContext.getAttribute("pageVar") %></li>   <!-- 페이지가 달라서 null나옴!!!!!! -->
   <li>REQUEST SCOPE:<%=request.getAttribute("requestVar") %></li> <!-- 같은 리퀘스트 객체라고 생각! 비록찍어보면 주소는 다르지만 그건 생각 노노노노 -->

</ul>

결론

지시어는 file속성으로 삽입된건 같은 페이지로 인식해서 삽입된 페이지안에 선언된 변수도 사용할 수 있고 

page이동을 해도 객체가 사라지지 않음!

근데 액션태그의 page속성으로  삽입된 건 다른페이지로 이동한 것으로 인식하기 때문에 삽입된 페이지 안에서 선언한 변수도 사용 못하고 page객체도 사라짐!

근데 또 재미있는건 request 객체는 공유하기 때문에 페이지 이동해도 사라지지않음 ! request 객체는 1개 !!

 

 

[예제 2. <jsp:forward>]  : 이동시키기

원래 포워드로 이동시키는건 

request.getRequestDispatcher("이동할페이지명.jsp").forward(reques,response)

이렇게 썼는데 저렇게 간단하게 코딩이 가능하다 !!!! 오오오오오오!!

 

액션태그로 포워딩할 페이지

ForwardActionTagIndex.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- ForwardActionTagIndex.jsp  -->
<%
	//포워드전 영역에 속성 저장
	pageContext.setAttribute("pageVar","페이지 영역");
	request.setAttribute("requestVar","리퀘스트 영역");	
%>

<!-- 액션 태그로 포워딩 -->
<jsp:forward page="/actionTag07/ForwardActionTagResult.jsp"/>

저 속성들이 어떻게 변하는지 볼거임

 

포워딩된 페이지(객체들을 받아보자)

ForwardActionTagResult.jsp

<fieldset class=" form-group border p-3">
	<legend class="w-auto px-3">각 영역에 저장 된 속성 출력</legend>
	<ul class="list-unstyled">
		<li>Page Scope : <%=pageContext.getAttribute("pageVar") %></li>
		<li>Request Scope : <%=request.getAttribute("requestVar") %></li>							
	</ul>			
</fieldset>

포워딩방식이라서 page객체는 사라지고

리퀘스트객체는 살아있음 url엔 처음페이지주소가 찍힘 !

 

+ Recent posts