[JSP] 8.3 include 디렉티브를 이용한 중복된 코드 삽입

2022. 4. 8. 18:05JAVA/Servlet&JSP

<jsp:include> 액션태그와 include 디렉티브의 차이

  • <jsp:include>는 다른 JSP로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 방식
  • include 디렉티브(<%@ include file="포함할 파일"%>)는 다른 파일의 내용을 현재 위치에 삽입 시킨 후에 JSP 파일을 자바 파일로 변환하고 컴파일하는 방식 

1. include 디렉티브의 처리 방식과 사용법

<%@ include file="포함할 파일" %>

 

include 디렉티브의 처리 방식

13_includer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	int number = 10;
%>
<!-- includee.jspf 파일의 내용이 그대로 포함된다. -->
<%@ include file="/Chapter08/14_includee.jspf" %>
공통 변수 DATAFOLDER = "<%=dataFolder %>"
</body>
</html>

14_includee.jspf

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
includer.jsp에서 지정한 번호: <%=number%>
<p>
<%
	String dataFolder = "c:\\data";
%>

2. 포함되는 파일의 변경과 적용

  • JSP 규약에 따르면 include 디렉티브로 포함한 파일을 변경할 경우, 변경된 내용이 곧바로 반영된다는 보장을 할 수 없다.

3. include 디렉티브의 활용

include 디렉티브의 용도

  • 모든 JSP 페이지에서 사용되는 공용 변수 지정
  • 저작권 표시와 같은 간단하면서도 모든 페이지에서 중복되는 문장

구축하려는 웹 어플리케이션의 대부분 JSP 페이지가 application 기본 객체나 session 기본 객체에 저장된 속성값을 읽어 사용한다고 가정한다. 이 경우 JSP 페이지는 다음과 같이 앞 부분에서 속성값을 읽어와서 변수에 저장하는 코드를 추가할 것이다.

<%
    String memberID = (String) session.getAttribute("MEMBERID");
    File tempFolder = (File) application.getAttribute("TEMPFOLDER");
    
%>

...
<%= memberID %>
...
<%
	fw = new FileWriter(tempFolder, "name.tmp");
%>

위의 소스코드에서 session 기본 객체, application 기본 객체로 속성 값을 읽어와 저장하는 대신 한 파일에 필요한 공통 변수를 저장하고 include 디렉티브로 불러오는 방법이 있습니다.

<%@ include file="commonVariable.jspf" %>

<%= memberID %>

<%
	fw = new FileWriter(tempFolder, "name.tmp");
%>

또한 다음과 같이 간단한 저작권 문장을 포함하고 있는 파일도 include 디렉티브로 일거올 파일의 좋은 후보입니다.

<%@ page contentType = "text/html; charset=UTF-8" %>
이 사이트의 모든 컨텐츠의 저작권은 최범균에게 있습니다.

 

4. 코드 조각 자동 포함 기능

JSP 2.0 규약은 자동으로 JSP의 앞뒤에 지정한 파일을 삽입시키는 기능을 제공하고 있습니다.

<%@ include file="/common/variable.jspf" %>	<!-- 삽입 시키고 싶은 include 디렉티브 -->
<html>
...
<%@ include file="/common/footer.jspf" %> 	<!-- 삽입 시키고 싶은 include 디렉티브 -->
</html>

 

web.xml

    <jsp-config>
         <jsp-property-group>
              <url-pattern>/view/*</url-pattern>
              <include-prelude>/common/variable.jspf</include-prelude>
              <include-coda>/common/footer.jspf</include-coda>
         </jsp-property-group>
    </jsp-config>
  • jsp-property-group : JSP의 프로퍼티를 지정
  • url-pattern : 프로퍼티를 지정할 JSP 파일에 해당하는 URL 패턴
  • include-prelude : url-pattern 태그에서 지정한 패턴에 해당되는 JSP 파일의 앞에 자동으로 삽입되는 파일을 지정
  • include-coda : url-pattern 태그에서 지정한 패턴에 해당되는 JSP 파일의 뒤에 자동으로 삽입되는 파일을 지정

 

WEB-INF/web.xml

    
    <jsp-config>
		<jsp-property-group>
			<url-pattern>/view/*</url-pattern>
			<include-prelude>/Chapter08/common/variable.jspf</include-prelude>
			<include-coda>/Chapter08/common/footer.jspf</include-coda>
		</jsp-property-group>
    </jsp-config>    
</web-app>

variable.jspf

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Date current_time = new Date();
	
%>

footer.jspf

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
김용환 작성함 푸터.

view/autoInclude.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>지금 시간</title>
</head>
<body>
    
    지금 시간은 <%= current_time %> 입니다.
</body>
</html>

 

References

source code : https://github.com/yonghwankim-dev/JSP2.0/tree/master/jsp2/src/main/webapp/Chapter08
JSP 2.0 프로그래밍 기초부터 중급까지