I. <jsp:include>

1. 설명

-. 서버측 include가 아닌 클라이언트측의 include라 생각하면 간단하다

즉 출력 결과만(html코드)을 include 한다

-. include 되는 페이지와 변수를 같이 사용할 수 없다

2. 속성

① page

-. 포함시키고자 하는 문서의 위치를 명시한다

-. 상대경로뿐만 아니라 절대경로도 가능하다

-. 서블릿 컨테이너에 따라 HTML 페이지는 안될 수도 있다

-. get 방식으로 파라미터를 전달 할수 없다

-. 동적으로 페이지 할당이 가능하다

        즉 <jsp:include page="<%=variable%>" flush="true"/> 가 가능하다

② flush

    -. true : 문서의 출력 결과를 항상 버퍼내에서 갱신 하라는 의미이다

3. 예제

a.jsp

...

<jsp:include page="b.jsp" flush="true"/>

...


a.jsp 결과에 b.jsp 가 실행된 결과가 include 된다

즉 따로따로 실행 된 후 그 결과(html)만을 가지고 include 한다


II. <%@ include %>

1. 설명

-. 서버측 include 라고 생각하면 된다

즉 소스 실행전에 include가 된다고 보자

-. 소스 실행전 포함됨으로 변수를 같이 사용할 수 있다

-. 동적으로 페이지 할당을 할 수가 없다

2. 속성

① file

    -. 포함될 페이지를 명시한다

3. 예제

a.jsp

...

<%@ include file="b.jsp" %>

...

b.jsp 코드자체가 a.jsp에 포함된 후 실행된다.

jsp:include

<jsp:include page="/xxx.jsp" />

1. 요청시간에 처리

2. 별도의 파일로 요청 처리 흐름을 이동

3. 화면 레이아웃의 일부분을 모듈화 할 때 주로 사용된다.

@include

디렉티브

1. JSP파일을 자바 소스로 변환할 때 처리

2. 현재 파일에 삽입시킴

연결된 파일을 포함해서 같이 컴파일 한다.

include 지시어는 다른 JSP의 소스 코드를 해당 JSP에 그대로 포함시킨다

반면에 액션 태그의 <jsp:include> 태그는 다른 JSP의 소스 코드가 아니라,

다른 JSP의 실행 결과값을 해당 JSP 페이지에 포함시킨다.

또한, include는 주로 조각난 코드를 삽입을 하고자 할때 사용되고,

<jsp:include> 액션 태그는 페이지를 모듈화할때 사용된다.

즉 템플릿 페이지를 작성할때 사용된다.

<!--
정적인 페이지 할 때 사용한다.>
-->
<%@ include file="/include/top.jsp" %>
<hr></hr>
index.jsp입니다.<br></br><br></br>
<hr></hr>
<%@ include file="/include/bottom.jsp" %>

=============================================================================

<%--
동적인 페이지 할 때 사용한다.

--%>

<jsp:include page="top.jsp">
<jsp:param value="ok" name="flag"/>
</jsp:include>
<hr></hr>
main.jsp....
<hr></hr>
<jsp:include page="bottom.jsp"></jsp:include>

name - 이동할 페이지에 전달될 파라미터의 이름 ( 표현식 사용 불가 )

value - 이동할 페이지에 전달될 파라미터의 값( 표현식 사용 가능 )

받는곳에서 request.getParameter("flag");로 받는다.

=============================================================================


JSP내의 Java Code를 Designer나 HTML Coder가 보기쉽고(?), 수정하기 쉽게(?) Java Code를 HTML Tag과 같은 Tag 형태로 사용할 수 있도록 한 JSP Custom Tag.

그중에 가장 많이 쓰이는 Tag인 <jsp:include /> 하지만 이 <jsp:include /> Tag의 단점은 원격지의 JSP 페이지를 include 할 수 없는데 있다.

이처럼 <jsp:include /> Tag로 할 수 없는 것을 <c:import /> Tag는 가능하게 해준다.

그럼.. 어떻게 사용하는가?

우선... 아래의 URL에서 Taglib를 다운 받는다.

http://people.apache.org/builds/jakarta-taglibs/nightly/projects/standard/

에서 JSP 버전에 맞는 Taglib 를 다운 받는다.
다운 받은 파일을 압축을 풀면... 4개의 (doc, javadoc, lib, tld) 디렉토리와, LICENSE, NOTICE, README 파일 그리고 2개의 WAR 파일이 있다.

우리가 필요한건... 다름아닌... lib 폴더 아래의 jstl.jar , standard.jar 이다.

이 두개의 jar 파일을 적용하고자 하는 JSP의 Container (WAS)의 /WEB-INF/lib/에 복사한다.

그리고는... JSP페이지에

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>을 추가하고,
<c:import />를 Tag를 사용하면 된다.

예)
<%
String url = http://xxx.xxx.xxx.xxx/naver/test.jsp;
%>
<c:import url="<%= url %>" charEncoding="EUC-KR">
<c:param name="query" value="민원" />
<c:param name="method" value="get" />
</c:import>

위와 같이 사용하면 원격지의 WEB 페이지를 include와 유사하게 사용할 수 있다.


----------------------------------------------------------------------------------------------------
위와 같은 환경에서 작업을 해야만 하는 이유가 있다.

WWW <---> [Firewall] <---> WEB <---> [Firewall] <---> WAS

와 같은 환경에서 WAS 서버에서는 외부망(인터넷망)으로 접속이 불가능하며, 오직 WAS와 WEB서버간의 특정 PORT를 열어서 둘간의 통신만 가능하는 경우가 있다.

그런데... 외부망 접속이 되지 않는 WAS에서 인터넷 상에 존재하는 데이터를 읽어와서 가공한 후
그 데이터를 JSP에 나타내야 하는 경우가 발생했다.

처음 시도는 RMI였다. RMI는 WAS와 WEB서버간 RMI Registry를 통해 원격 객체를 등록한 후 WAS에서 WEB의 JAVA Code를 로컬에 있는 객체처럼 사용할 수 있기 때문이었다.

하지만... RMI Code는 완성되었는데... WAS와 WEB서버간 열수있는 PORT가 최소 2개있어야 하는데... PORT를 추가로 OPEN할 수 없는 상황이었다. 즉, RMI로 프로그램을 작성했지만...
환경적 문제로 인하여 RMI를 사용할 수 없게된거다. ToT

그러다가... 생각해낸 방법이 Http 통신이다.
WAS와 WEB서버간 RMI를 위한 PORT를 OPEN한 상태였기 때문에... WEB서버에 추가적으로 Tomcat을 설치하고, 그 Tomcat의 서비스 포트를 RMI 등록용 PORT로 맞춰서 WAS에서 처리해야 할 Java 및 JSP 코드를 WEB서버에 Tomcat을 설치하고 Tomcat을 통해 처리한 후 WAS에 있는 JSP에서 include 할 계획이었다.

앗! 그러나... <jsp:include /> 이 Tag는 원격지 파일 include가 안되는 거다. 또한번 좌절...
하지만... 결국 해결책을 찾았다. 바로 <c:import /> Tag였다.

이 번 일을 통해서.. 중요한 2가지를 배울 수 있었다.
하나는 RMI와 관련된 내용이고, 또 하나는 여기에 서술한 <c:import /> Tag

갈증을 해소하기 위해서 삽질 중이라면... 중간에 포기하지마라...
삽질이 결국 갈증을 해소해준다. 


[출처] http://blog.naver.com/rookieangel?Redirect=Log&logNo=140110137373

'프로그래밍 > Servlet & JSP' 카테고리의 다른 글

el 표현 언어 사용 법  (0) 2014.07.28

+ Recent posts