본문 바로가기
IT 개발, develop/java

JSP 에서 Include, JSTL을 이용한 Include

by newly everyday 2018. 10. 19.
Include 현재의 문서에 다른 문서, 즉 다른 파일의 내용을 포함시켜 출력하는 것을 말합니다.
따라서 include는 두개 문서의 출력을 한 번에(한 페이지에) 보여주고자 할 때 사용합니다.


in JSP
JSP에서는 두 가지 방법으로 다른 문서를 현재의 문서에 포함시킬 수 있습니다.

include를 위한 두 가지 방법으로는 <%@ include %>와 <jsp:include />가 있는데 이는 컴파일 되는 방법에 따라 각각 정적인 include와 동적인 include라고 할 수도 있습니다.

하지만 이 방법들은 원격지의 페이지를 포함할 수 없는데, 이를 해결하기 위한 다른 방법은 이 글의 아래에서 알아보도록 하겠습니다.


<%@ include file="" %>

먼저 살펴볼 <%@ include ...%>는 정적인 include입니다. 이것에서 @은 Directive 라는 의미이며, 포함하는 문서에 정적으로컴파일됩니다. 좀 더 쉽게 생각하면, include될 파일을 include하는 파일에 삽입시켜 내용을 합치고 연결된 파일을 포함한 후에 함께 컴파일한다고 할 수 있습니다. 따라서, include하는 파일과 include되는 파일은 하나의 파일로 인식되며, 사용하고자 하는 변수 또한 공유하게 됩니다. 또한 이 방법에는 특징이 하나 있는데,  page Directive(<%@ page ... %>)를 생략한다는 점입니다. 두 파일을 합쳐 컴파일하게 되므로 page Directive가 두 번 있게 되어 오류가 나게 됩니다.

// JSP파일을 JAVA 소스로 변환할 때 처리


  *  including.jsp

<%@ pagepageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

 

<html>

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>Home</title>

</head>

<body>

        <div> 현재 시각은 ${ serverTime } 입니다</div>

        <div>

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

        </div>

</body>

</html>


  *  included.jsp

<%@ pagepageEncoding="UTF-8" %>


<span>

현재 시각을 전달받았습니다<br />

전달받은 시간은 ${serverTime } 입니다.

</span>


<jsp:include page="" />

다음으로 살펴볼 <jsp:include ... />는 동적인 include입니다. 이는 <JSP: />의 action을 이용하는 구문으로서 포함하는 문서와 관계 없이 동적으로 컴파일됩니다. 이것 또한 좀 더 쉽게 생각해 보면, include되는 파일과 include 시키는 파일을 각각 컴파일 한 후 두 파일의 실행 결과를 한 곳에 합쳐서 출력한다고 할 수 있습니다. 따라서, 이 파일들은 완전히 "별도로" 동작하며, 사용하고자 하는 변수는 파라미터로 따로 넘겨주어야 합니다.

// 요청 시간에 처리,  별도의 파일로 요청 처리 흐름을 이동

// 화면 레이아웃의 일부분을 모듈화 할 때


  *  including.jsp

<%@ pagepageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

 

<html>

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>Home</title>

</head>

<body>

        <div> 현재 시각은 ${ serverTime } 입니다</div>

        <div>

               <jsp:include page="jspIncludeHeader.jsp">

                       <jsp:param name="serverTime" value="${serverTime}"></jsp:param>

               </jsp:include>

        </div>

</body>

</html>


  *  included.jsp

<%@ page pageEncoding="UTF-8" %>


<span>

현재 시각을 전달받았습니다<br />

전달받은 시간은 ${ serverTime } 입니다.

</span>



in JSTL
"원격지의" 다른 문서(페이지)를 현재의 문서에 포함시키기 위해서는 JSTL(JSP Standard Tag Library)을 이용할 수 있습니다.
JSTL은 include를 위해 <c:import ... /> 태그를 제공합니다.


<c:import url="" />

<c:import ... /> 태그는 좀 더 일반적이고 강력한 기능을 가진 <jsp:include>로서, 이것이 컴파일되고 동작하는 방식 또한 <jsp:include>와 같습니다. 사용하고자 하는 변수를 넘겨주는 방식 또한 같습니다. 앞서 말했다시피, 이것이 <jsp:include>와 구분되는 가장 큰 특징은 외부 서버에 있는 url 형식의 페이지까지 포함 가능하다는 점입니다. 따라서 외부 웹 사이트나 웹 애플리케이션에서 콘텐트를 가져올 수도 있습니다.

  *  including.jsp

<%@ pagepageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

<html>

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>Home</title>

</head>

<body>

        <div data-role="page" id="page">

               <div> 현재 시각은 ${ serverTime } 입니다.</div>

               <div data-role="header">

                       <c:import url="cImportHeaderjsp" charEncoding="UTF-8">

                              <c:param name="serverTime" value="${serverTime}"></c:param>

                       </c:import>

               </div>

        </div>

</body>

</html>


  *  included.jsp

<%@ page pageEncoding="UTF-8" %>


<span>

현재 시각을 전달받았습니다<br />

전달받은 시간은 ${ serverTime } 입니다.

</span>


출처: http://prioriq.tistory.com/3 [reBreeze]

댓글