[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지시어와 <include> 액션태그</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엔 처음페이지주소가 찍힘 !
'학원 > JSP' 카테고리의 다른 글
11/23 49-8 [JSP] Action Tag(DynamicPage) (1) | 2022.11.24 |
---|---|
11/23 49-7 [JSP] Action Tag(forward예제) (0) | 2022.11.24 |
11/23 49-5 [JSP] Session(로그인/아웃) (0) | 2022.11.23 |
11/23 49-4 [JSP] Session(기본정리) (0) | 2022.11.23 |
11/23 49-3 [JSP] Cookie연습2(로그인/아웃처리) (0) | 2022.11.23 |