[JSP] 공통코드 작성하기 - include 디렉티브

- include 디렉티브도 <jsp:include> 액션태그와 마찬가지로 지정한 페이지를 현재 위치에 포함시키는 기능을 제공함.

- 하지만 포함하는 방식에 <jsp:include> 액션태그와의 차이점이 분명히 존재.

- <jsp:include> 액션태그는 실행흐름이 해당 페이지로 넘어가는 방식

- include 디렉티브는 다른 jsp 내용을 현재위치에 삽입하여 자바파일로 변환한 후 컴파일하고나서 진행되는 방식.

- 실행흐름이 다른 jsp 파일로 넘어가는 방식과 컴파일 이후 수행되는 방식의 미묘한 차이점 존재

 

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

- include 디렉티브를 통해 다른 JSP에 포함되는 JSP 파일의 경우 일반 JSP 파일과 구분하기 위해서 확장자로 jspf를 사용하는 편. 확장자를 jsp로 사용해도 되긴함. jspf는 JSP Fragment의 약어. jsp 소스조각이란 뜻.

 

<jsp:include> 액션태그가 레이아웃의 한 구성요소를 모듈화하기 위해 사용하였다면 include 디렉티브는 아래 두가지의 목적으로 주로 사용된다.

1. 모든 JSP 페이지에서 사용하는 변수 지정

- 만약 이러한 변수선언이 이루어지는 페이지가 많아지게 된다면 아래의 코드를 jspf 파일로 빼서 해당 페이지에 include하는 편이 훨씬 코드를 줄이는 방법이라는 것이다.

<%
    String memberID = (String)session.getAttribute("memberid");
    File file = (File)application.getAttribute("file");
%>
...
<%=memberID%>
...
<%
	fw = new FileWriter(file,"name.file");
%>

2. 저작권 표시와 같은 모든 페이지에 중복되는 간단한 문장

<%@ page contentType="text/html; charset=utf-8" %>
All Copy Right. 이 사이트의 모든 저작물의 저작권은 코딩하는 흑구에게 있습니다.

비슷한 케이스이긴하다. 1,2와같은 상황이 온다면 그냥 include 해버리면 어차피 컴파일하고난 후 페이지를 읽어들일 것이니 필요한 페이지에 각각 소스를 적든 페이지로 뺴서 include 하던 비슷한 퍼포먼스를 보인다는 것이다.

그럴 바에는 페이지 하나로 빼서 관리하는 편이 개발자가 취해야할 가장 경제적인 소스관리인것 같다.

 

그런데 또 다른 문제점이 발생한다. 이렇게 모든페이지에 include 문을 다 하나씩 집어넣는 것도 이제는 코드의 중복으로 보는 개발자들이 증가하게 된다. (개발자들은 소스의 중복을 병적으로 싫어하는 경향이 있는 집단이다.)

 

따라서 web.xml에 다음과 같이 설정을 해두면 url-pattern에 맞는 페이지에는 소스가 자동으로 삽입되게 된다.

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

	<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>

</web-app>

<jsp-property-group> : JSP의 프로퍼티를 포함한다.

<url-pattern> : 프로퍼티를 적용할 JSP 파일의 URL 패턴을 지정한다. 모든 jsp 파일에 삽입하고자 한다면 *.jsp 라고하면 된다.

<include-prelude> : url-pattern 태그에 지정한 패턴에 해당하는 JSP 파일의 앞에 삽입할 파일을 지정한다.

<include-coda> : url-pattern 태그에 지정한 패턴에 해당하는 JSP 파일의 뒤에 삽입할 파일을 지정한다.

댓글

Designed by JB FACTORY