목요일, 4월 18
Shadow

#008 페이지 모듈화와 요청 흐름 제어

01. <JSP:include> 액션 태그
– main.jsp가 웹 브라이저에 요청을 받는다.
– 출력내용 A를 출력버퍼에 저장한다.
– <jsp:include>가 실행되면 요청흐름을 sub.jsp로 이동시킨다.
– 출력내용 B를 출력버퍼에 저장한다.
– sub.jsp의 실행이 끝나면 요청 흐름이 다시 amin.jsp의 <jsp:include>로 돌아온다.
– <jsp:include> 이후 부분인 출력내용 C를 출력 버퍼에 저장한다.
– 출력 버퍼의 내용을 응답 데이터로 전송한다.

태그 사용법
– <jsp:include page = “포함할페이지” flush =”true”/>
page : 포함할 jsp 페이지
flush : 지정한 jsp페이지를 실행하기 전에 ㅊ풀력 버퍼를 플러시 할지의 여부를 저장한다. true이면 출력 버퍼를 플러시 하고, false이면 하지 않는다.
<jsp:include page = “sub.jsp” flush =”true”/>
* 액션 태그를 이용한 중복 영역의 처리
– 한개의 JSP페이지만 같은 코딩이 반복된다면 개발 및 유지 보수 과정에서 문제가 발생하게 된다. <JSP:INCLUDE> 태그를 사용하면 공통되는 부분의 수정에 따른 문제를 최소화 할수 있다.

– <jsp:param>을 이용한 포함될 페이지에 파리미터 추가
JSP 페이지에 파라미터를 추가 할수 잇다.
<jsp:param name=”param1″ value=”value1″>
<jsp:param> 액션태그는 <jsp:include>의 자식태그로 추가되며, 액션태그를 사용하여 파라미터를 추가로 전달할수 있다.
<jsp:include page = “infosub.jsp” flush =”false”>

<jsp:param name=”type” value=”A” />
<jsp:include>
—————— 파라미터 받을시.
<%
String type = request.getParameter(“type”);
%>02. include 디렉티브를 이용한 중복된 코드 삽입
<%@ include file = “ㅎ포함할 파일” %>

main.jsp페이지
—————————-
<%
int number=10;
%>
<%@ include file =”includee.jspf” %>

공통변수 datafolder = “<%=dataFolder %>”
—————————-
includee.jspf페이지
<%
String dataFolder = “C:\\data”;
%>

* 코드 조각 자동 포함 기능
<@ include file=”/common/variable.jspf” %>
……..
……..
<@ include file=”/common/footer.jspf” %>
– 중복된 코드가 많다면 web.xml 파일에 다음과 같은 설정 정ㅂ1ㅗ를 추가해 줌으로서 코드 중복을 방지 할수 있다.
<jsp-config>
<jsp-property-group>
<url-pattern>/view/*</url-pattern>
<incldue-prelude>/common/variable.jspf</include-prelude>
<include-coda>/common/footer.jspf<include-coda>
</jsp-property-group>

<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<incldue-prelude>/common/variabl2e.jspf</include-prelude>
<include-coda>/common/footer2.jspf<include-coda>
</jsp-property-group>
</jsp-config>

* <incldue-prelude>/common/variable.jspf</include-prelude>
– JSP파일 앞에 자동으로 삽입될 파일을 지정한다.
* <include-coda>/common/footer.jspf<include-coda>
– JSP파일 뒤에 자동으로 삽입될 파일을 지정한다.

첫번째는 /view/*로 들어오는 모든 요청, 두번째는 모든 JSP 요청일경우 자동으로 variable.jspf와 footer.jspf파일이 삽입된다.

* <jsp:include>액션태그와 include 디렉티브의 비교
<jsp:include> 액션태그
처리시간 : 요청시간에 처리
기능 : 별도의 파일로 요청 처리 흐름을 이동
데이터 전달방법 ; request기본 객체나 <JSP:param>을 이용한 파라미터 전달
용도 : 화면의 에이아웃의 일부분을 모듈화 할때 주로 사용

include 디렉티브
처리시간 : JPS 파일을 자바 소스로 변활 할때 처리
기능 : 현재 팡리에 삽입
데이터 전달 방법 : 페이지 내의 변수를 선언후, 변수에 값 저장
용도 : 다수의 jsp페이지에서 공통으로 사용되는 변수를 지정하는 코드나 저작권과 같은 문장을 포함

03. <jsp:forward> 액션태그를 이용한 JSP  페이지 이동
– 하나의 JSP 페이지에서 다른 JSP페이지로 요청 처리를 전달 할때 사용된다.
– 흐름도
1. 웹 브라우저의 요청이 from.jsp에 전달 된다.
2. from.jsp는 <jsp:forward>액션 태그를 실행한다.
3.<jsp:forward> 액션태그가 실행되면 요층 흐름이 to.jsp로 이동한다.
4. 요청 흐름이 이동할때 from.jsp에서 사용한 request  객체와 response 객체가 to.jsp로 전달된다.
5. to.jsp는 응답 결과를 생성한다.
6. to.jsp가 생성한 결과가 웹 브라우저에 전달된다.
——————–
from.jsp가 아닌 to.jsp가 생성한 응답 결과가 웹 브아우저에 전달된다.
from.jsp에서 사용한 request, response 객체가 to.jsp에 그대로 전달된다.

<jsp:forward> 액션 태그의 사용법
<jsp:forward page=”이동할 페이지”/>

client -> 요청을 보냄–>from.jsp
–>from.jsp의 출력결과 버퍼에 저장
<jsp:forward>액션태그를 실행 –>from.jsp 출력 버퍼를 비움
to.jsp로 흐름이동 –> to.jsp의 출력결과 버퍼에 저장
to.jsp가 응답을 보냄 –> 출력버퍼의 내용을 응답 결과를 사용

* 이전에 출력 버퍼에 저장됐던 내용은 웹 브라우저에 전송되지 않는다. 또한 <jsp:forward> 액션 태그뒤에 위차한 코드는 실행조차 되지 않는다.

<form action =”<%= request.getContextPath()%>/view.jsp”>

보고싶은 페이지 선택 :
<select name=”code”>
<option value=”A”>A</option>
<option value=”B”>B</option>
<option value=”C”>C</option>
</select>
<input type = “submint” value=”이동”>
</form>
————————————–view.jsp
<%
String code = request.getParameter(“code”);
String forwardPage = null;
if(option.equals(“A”)){
forwardPage = “/view/typeA.jsp”;
}else if(option.equals(“B”)){
forwardPage = “/view/typeB.jsp”;
}else if(option.equals(“C”)){
forwardPage = “/view/typeB.jsp”;
}
%>

<jsp:forward page =”<%=forwardPage %>”/>

* <jsp:param>액 션태그를 이용해서 이동할 페이지에 파라미터 추가하기
<jsp:forward page=”moveTo.jsp>
<jsp:param name=”first” value=”bk”/>
<jsp:param name=”last” value=”choi”/>
</jsp:forward>

05. 기본 객체의 속성을 이용해서 값 전달하기
Stirng 타입이 값만 전달할수 있기 떄문에, 날짜 데이터나 숫자 또는 기본 데이터 타입이 아닌 객체 타입을 파라미터로 전달하기 위해서는 값을 문자열로 변환해 주어야 하고 반대로 문자열을 알맞은 타입으로변환해 주는 기능도 추가로 구현 해 주어야 한다.

<jsp:forward> 액션 태그를 사용해서 흐름을 to.jsp로 이동시키는데, 이때 동일한 요청을 처리하는데 form.jsp와 to.jsp가 사용된다 따라서 form.jsp와 to.jsp는 하나의 request객체를 공유하게 된다. 따라서 이 객체의 새로운 속성을 추가하게 되면, to.jsp에서는 그 속성을 읽어와 사용할수 있게 된다. 겨로가적으로 from.jsp에서 to.jsp로 값을 전달하는 효과를 보게 된다.

<%
Calendar cal= Calendar.getInstance();
request.setAttrivute(“time”,cal);
%>
<jsp:forward page = “to/viewTime.jsp”/>
—————————-viewTime.jsp
<%
Calendar cal = (Calendar) request.getAttribute(“time”);
%>

현재 시각 : <%=cal.get(Calendar.HOUR)%>시

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.