Jsp 커스텀 태그라이브러리(Custom Tag Library Descriptor) 생성 및 사용

2016. 11. 11. 14:20language/jsp

 

Spring Jsp 커스텀 태그라이브러리(Custom Tag Library Descriptor) 생성 및 사용

 

 

 

EL (Expression Language) 에서 사용자가 정의한 Java 메서드를 사용해야 할 일이 있을까 ?

 

JSTL(Jsp Standard Tag Library 표준 태그 라이브러리)을 사용하면 대부분의 갈증이 해소된다.

 

갈증이 해소되면 커스텀 태그라이브러리(Custom Tag Library Descriptor)가 필요하지 않다.

 

하지만 업무시스템에 최적화되어 있는 함수들 또는 자주 반복되는 작업들을 공통으로 구현해놓은 Util Class 등이 있을 수 있다.

 

저 함수들을 JSP 에서 EL을 이용해서 사용하려면 커스텀 태그라이브러리(Custom Tag Library Descriptor) 가 필요하다.

 

아래 내용을 참고해보자.

 



 

공통 유틸 클래스

1
2
3
4
5
6
7
package test.framework.util;
 
public class CommonUtil {
    public static String getTest(String txt){
        return txt + "님";
    }
}
cs

위 같이 공통으로 사용할 유틸 클래스가 있다.

 

Java에서는 static 함수이기 때문에 아래와 같이 자유롭게 사용할 수 있다.

1
CommonUtil.getTest("홍길동");
cs

 

JSP 페이지에서함수를 가져다 쓰고싶으면 어떻게 해야할까 ?

 

스크립트 요소중에서

스크립트릿(Scriptlet) <% CommonUtil.getTest("홍길동"); %>

또는

표현식(Expression) <%= CommonUtil.getTest("홍길동")%>

를 사용하여 표현할 수 있다.

 

 

하지만 이젠 EL (Expression Language) 를 사용하고 스트립트 요소들은 사용하지 않는다.

 

EL이 스크립트 요소의 표현식보다 간결하고 빈즈 접근성 등 여러 장점이 있기 때문이다.

 

그런데 EL에서는 스크립트 요소들 처럼 Java 클래스나 함수를 이용할 수 없다.

 

EL 에서 JAVA 클래스의 메소드를 호출하려면 커스텀 태그라이브러리(Custom Tag Library Descriptor) 를 만들어야 한다.

 

 

 

 

커스텀 태그라이브러리(Custom Tag Library Descriptor) 생성

WEB-INF > tlds > CommonUtil.tld 파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?>
 
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
 
    <description>CommonUtil functions library</description>
    <display-name>CommonUtil functions</display-name>
    <tlib-version>1.1</tlib-version>
    <short-name>cutil</short-name>
    <uri>tld/CommonUtil.tld</uri>
 
    <function>
        <description>문자열에 님 붙이기</description>
        <name>getTest</name>
        <function-class>test.framework.util.CommonUtil</function-class>
        <function-signature>java.lang.String getTest(java.lang.String)</function-signature>
        <example>
        ${cutil:getTest(str)}
        </example>
    </function>
</taglib>
cs

7# : 태그 라이브러리 파일 설명

8# : 태그라이브러리 파일 이름

9# : 버전

10# : 짧은 이름

11# : JSP에서 선언될 URL

13# : 함수 시작

14# : 함수 설명

15# : 함수 이름

16# : 사용할 함수의 클래스

17# : 함수 선언 (함수는 Java Class 에서 static 으로 구현되어 있어야 함)

<function-signature>리턴타입 함수명(파라미터)</function-signature>

18# : 사용방법 설명

19# : 사용방법

20# : 사용방법 설명 종료

21# : 함수 종료

 

계속 다른 함수를 추가하려면 <function> ... </function> 를 추가하면 된다.

 



 

JSP

1
2
3
<%@ taglib prefix="cutil" uri="tld/CommonUtil.tld"%>
 
${cutil:getTest('홍길동')}
cs

1# : JSP 최 상단 선언부에 태그라이브러리를 사용하겠다고 선언한다. (prefix : 접두어)

3# : JSP 파일 내부에서 사용한다.

 

 

 

 

혹시 태그라이브러리를 인식하지 못하거나 파일의 경로를 바꾸고 싶다면 web.xml에 선언해주면 된다.

 

web.xml

1
2
3
4
5
6
7
8
9
10
11
<jsp-config>
    <taglib>
        <taglib-uri>
            /WEB-INF/tlds/el-functions.tld
        </taglib-uri>
        <taglib-location>
            /WEB-INF/tlds/el-functions.tld
        </taglib-location>    
    </taglib>
</jsp-config>
 
cs