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>    
    </tablib>
</jsp-config>
 
cs

 

by 개발자 CofS 2016.11.11 14:20
  • 강희웅 2017.11.08 07:45 신고 ADDR EDIT/DEL REPLY

    빈즈 접근성이 좋다는걸 예를 들어서 알려주세요

    • Favicon of https://cofs.tistory.com BlogIcon 개발자 CofS 2017.11.08 09:06 신고 EDIT/DEL

      jsp에서 빈즈에 접근하는 방법에 대해 고민해보면
      접근성이 왜 좋은지 고민해 볼 수 있음

      jsp에서 접근하는 방법은 여러가지가 있는데 생각나는데로 적어보면

      1.스크립트릿 등 표현식 사용
      사용할 빈즈를 request에서 꺼내어 사용해야 함
      가독성 및 코드량(비지니스로직)이 증가함

      2.el을 사용하여 접근하는 방법
      스코프를 지정하면 해당하는 빈즈에 접근이 가능함
      비지니스 로직이 없고 가독성이 뛰어남

      3.usebean 선언을 통해서 사용할 수 있음
      선언하는 방법은 비교적 간단하나
      사용해야할 usebean이 10개면 10번을 선언해 주어야 함
      사용할 경우에는 스크립트릿이나 표현식으로 사용하며 역시 가독성 및 코드량이 증가함

| 1 2 3 4 5 6 7 8 9 10 ··· 29 |