자바개발과정/XML

XML과 JSP(TLD, web.xml)

경진 2008. 7. 17. 15:38
TLD

TLD(Tag Library Descriptor) 파일

태그 라이브러리에 대한 설정 정보를 담고 있는 파일이며, 함수를 구현한 클래스, 메소드 시그너쳐(형태), 함수의 이름에 대한 정보를 담고 있다. 이것은 태그 핸들러와 태그를 연결하는 XML 파일로 크게 XML 문서 선언, XML 스키마 지정, 태그 정보 지정 부분으로 구성된다. 보통 WEB-INF 폴더의 하위에 tld 폴더 생성 후 확장자 tld로 파일 저장한다.

XML 문서 선언

XML 문서의 호환성을 위한 선언 부분이며, 모든 TLD 문서에 동일하게 사용한다.

XML 스키마 지정

현재 XML 문서의 규칙을 담고 있는 스키마 파일을 지정함. 모든 TLD 문서에 동일하게 사용된다. 복잡하므로 실수를 방지하기 위해, 직접 입력하지 말고 가능한 복사해서 사용한다.

태그 정보 지정

태그 정보는 <taglib> 태그로 기술한다.

<taglib> 설정을 위한 하위 태그 목록

태그 설명
<tlib-version> 태그 라이브러리의 버전으로, 개발자에 의해 설정되는 부분
<jsp-version> 적용되는 JSP 버전
<short-name> 현재 태그 라이브러리의 간단한 이름
<uri> taglib을 고유한 것으로 만들어주는 URI 정보
<display-name> 출력에 사용되는 taglib 이름
<description> 태그 라이브러리에 대한 설명이 들어가는 부분
<function> 표현언어에서 함수 호출

<uri> 태그에는 태그 라이브러리 이름이 들어가는 부분이며, 다음의 표현언어 함수를 호출하는 JSP 페이지의 taglib 태그에서 taglib 태그의 uri 속성이 <uri> 태그와 동일하게 기술되어야 한다.

<%@ taglib prefix="elfunc" uri="/WEB-INF/tld/el-functions.tld" %>

taglib 지시자는 자바 클래스에 사용할 메소드를 정의한 TLD 파일(el-functions.tld)을 로딩하기 위해서 필요하다. taglib 지시자의 prefix 속성은 태그 라이브러리를 구분할 때 사용할 접두어를 나타낸다. uri 속성 값은 web.xml 파일의 <taglib-uri>에 지정한 <taglib> 태그 내용으로 지정한다.

첨부파일


JSP에서 태그 라이브러리에 대한 설정 정보를 담고 있는 TLD 파일 작성 예제이다.

버전을 출력하는 간단한 클래스 작성(JAVA 파일)

package glory;

public class Version {
    private static double Ver=1.0;

    public static double getVersion() {  
        return Ver;
    }
}

자바 클래스의 메소드에 접근하기 위한(JSP 파일)

<%@ page contentType = "text/html; charset=euc-kr" %>
<%
glory.Version v=new  glory.Version();
%>

<%= v.getVersion() %>

\WEB-INF\tlds\el-functions.tld(버전 출력 용 클래스 작성을 위한 TLD 파일)

<?xml version="1.0" encoding="euc-kr" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                        web-jsptaglibrary_2_0.xsd"
    version="2.0">
   
    <description>EL에서 함수실행</description>
    <tlib-version>1.0</tlib-version>
    <short-name>ELfunctions</short-name>
    <uri>/ELFunctions</uri>
 
    <function>
        <description>버전을 출력</description>
        <name>getVersion</name>
        <function-class>
          glory.Version
        </function-class>
        <function-signature>       
          double getVersion()
        </function-signature>        
    </function>
</taglib>

\WEB-INF\web.xml(TLD 파일 작성 후 web.xml 파일에 TLD 파일 내용 추가)

<?xml version="1.0" encoding="euc-kr"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <display-name>18</display-name>
    <description>
        18
    </description>
   
    <taglib>
        <taglib-uri>
            /WEB-INF/tlds/el-functions.tld
        </taglib-uri>
        <taglib-location>
            /WEB-INF/tlds/el-functions.tld
        </taglib-location>
    </taglib>
</web-app>

표현 언어로 자바 클래스의 메소드 접근(JSP 파일)

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page session="true" %>
<%@ taglib prefix="elfunc" uri="/WEB-INF/tlds/el-functions.tld" %>
<html>
<head><title>표현 언어 함수 호출</title></head>
<body>
버전은 <b>${elfunc:getVersion()}</b> 입니다.
</body>
</html>

첨부파일


JSP와 서블릿을 사용하는 Web Application의 설정 정보를 담고 있는 web.xml

JSP 2.0/서블릿 2.4를 지원하는 웹 콘테이너에서는 JSP 1.2/서블릿 2.3 버전에 알맞은 web.xml 파일을 사용할 수 있지만, 그 반대는 아니므로 web.xml 파일을 작성할 때에는 Web Application이 실행될 웹 콘테이너가 지원하는 버전을 확인하는 것이 좋다.

<?xml version="1.0" encoding="euc-kr"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
 
    <description>웹 어플리케이션 설명</description>
    <display-name>출력이름</display-name>
    <small-icon>작은이미지아이콘의경로</small-icon>
    <large-icon>큰이미지아이콘의경로</large-icon>
   
    <filter>
        <description>필터설명</description>
        <display-name>출력이름</display-name>
        <small-icon>작은 이미지아이콘의경로</small-icon>
        <large-icon>큰 이미지아이콘의경로</large-icon>
        <filter-name>필터이름</filter-name>
        <filter-class>필터 클래스의 완전한 이름</filter-class>
        <init-param>
            <param-name>초기화 파라미터 이름</param-name>
            <param-value>초기화 파라미터 값</param-value>
        </init-param>
    </filter>
   
    <filter-mapping>
        <filter-name>필터이름</filter-name>
        <url-pattern>필터 적용 URL 패턴</url-pattern>
        <!-- JSP 2.0/Servlet 2.4 -->
        <dispatcher>REQUEST|INCLUDE|FORWARD|ERROR</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>필터이름</filter-name>
        <servlet-name>필터를 적용할 서블릿 이름</servlet-name>
        <!-- JSP 2.0/Servlet 2.4 -->
        <dispatcher>REQUEST|INCLUDE|FORWARD|ERROR</dispatcher>
    </filter-mapping>
   
    <servlet>
        <description>서블릿설명</description>
        <display-name>서블릿출력이름</display-name>
        <small-icon>서블릿의 작은이미지아이콘의경로</small-icon>
        <large-icon>서블릿의 큰미지아이콘의경로</large-icon>
        <servlet-name>서블릿이름</servlet-name>
        <servlet-class>서블릿 클래스</servlet-class>
        <init-param>
            <param-name>초기화 파라미터 이름</param-name>
            <param-value>초기화 파라미터 값</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
   
    <servlet>
        <description>JSP설명</description>
        <display-name>출력이름</display-name>
        <small-icon>JSP의 작은이미지아이콘의경로</small-icon>
        <large-icon>JSP의 큰미지아이콘의경로</large-icon>
        <servlet-name>서블릿이름</servlet-name>
        <jsp-file>JSP경로</jsp-file> <!-- JSP 2.0/Servlet 2.4 -->
        ...
    </servlet>
   
    <servlet-mapping>
        <servlet-name>서블릿이름</servlet-name>
        <url-pattern>경로패턴</url-pattern>
    </servlet-mapping>
   
    <session-config>
        <!-- 기본 세션 타임아웃 시간 설정: 분 단위 -->
        <session-timeout>60</session-timeout>
    </session-config>
   
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>index.htm</welcome-file>
        ...
    </welcome-file-list>
   
    <error-page>
        <error-code>에러코드</error-code>
        <location>에러페이지 경로</location>
    </error-page>
    <error-page>
        <exception-type>예외 클래스 타입</exception-type>
        <location>에러페이지 경로</location>
    </error-page>
   
    <taglib>
        <taglib-uri>태그라이브러리 식별자 URI</taglib-uri>
        <taglib-location>TLD 파일 경로</taglib-location>
    </taglib>
   
    <!-- JSP 2.0/Servlet 2.4 -->
    <jsp-property-group>
        <url-pattern>URL패턴</url-pattern> <!-- 다중 지정 가능 -->
        <el-ignored>EL무시여부(true|false)</el-ignored>
        <page-encoding>페이지의인코딩</page-encoding>
        <scripting-invalid>스크립트 무시 여부(true|false)</scripting-invalid>
        <include-prelude>자동으로 포함할 헤더의 경로</include-prelude>
        <include-coda>자동으로 포함할 풋터의 경로</include-coda>
    </jsp-property-group>
   
</web-app>

서블릿 2.3/JSP 1.2를 지원하는 웹 콘테이너의 경우는 web.xml 파일의 선언부를 다음과 같이 지정해 주어야 한다

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!-- JSP 2.0 /Servlet 2.4에서만 지원되는 태그를 제외한 나머지 태그 사용 가능 -->
……
</web-app>