본문 바로가기

자바스토리

[JSTL] 커스텀 태그 - JSP 1.2

펌 - http://warmz.tistory.com/720


유형별 커스텀 태그 개발 방법

 유형 개발 방법
 - 태그 라이브러리로 개발
 - 여러 사이트에 적용
 - 개발된 커스텀 태그 배포
 - 호환성 유지
 JSP 1.2 호환 개발 방법 
 - 많은 화면을 생성해내는 태그
 - 비교적 간단한 기능들로 구성
 - 단일 사이트에 적용
 태그 파일 기반의 개발 방법 
 - 보다 쉬운 개발 
 - 태그 라이브러리로 개발
 - 여러 사이트에 적용
 - 공개 등
 - 호환성 배제
 SimpleTag, simpleTagSupport 클래스를 이용한 개발 방법 


JSP 1.2 커스텀 태그 구조

 구성 요소 설명 
 태그 핸들러 클래스
 (Tag Handler Class)
 자바 클래스 파일로 태그의 동작을 구현해놓은 파일이다. 
 태그 라이브러리 기술자
 (Tag Library Descriptor)
 태그 이름 등 태그 정보 및 태그 핸들러 클래스와의 관계를 기술한다. 
 JSP 파일 커스텀 태그를 사용하기 위해서는 JSP 파일에 taglib 지시어 등 추가적인 작업이
 필요하고, 실제 태그 라이브러리 기술자에 따라 커스텀 태그를 사용한다. 


태그 핸들러 클래스

 메서드 설명 
 doStartTag() 시작 태그를 만날 때 자동으로 호출되는 메서드 
 doEndTag() 종료 태그를 만날 때 자동으로 호출되는 메서드 
 doAfterBody()  태그 바디가 있을 때 처리를 위해 자동으로 호출되는 메서드 


예제)

jspbook/ch10/MsgTagHandler.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package jspbook.ch10;
 
import java.io.IOException;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
 
public class MsgTagHandler extends TagSupport {
    private static final long serialVersionUID = 1L;
 
    @Override
    public int doStartTag() throws JspException {
        try {
            JspWriter out = pageContext.getOut();
            out.print("커스텀 태그 출력 메시지 : Hello!!");
        } catch (IOException e) {
            e.printStackTrace();
        }
         
        return SKIP_BODY;
    }
}


WebContent/tld/MsgTag.tld

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="euc-kr" ?>
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/
        version="2.0">
         
        <description>간단한 커스텀 태그 예제</description>
        <tlib-version>1.2</tlib-version>
        <jsp-version>1.2</jsp-version>
        <short-name>MsgTag</short-name>
         
        <tag>
            <name>hello</name>
            <tag-class>jspbook.ch10.MsgTagHandler</tag-class>
            <body-content>empty</body-content>
        </tag>   
</taglib>


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

 태그 설명 
 <tlib-version> 태그 라이브러리의 버전으로, 개발자에 의해 설정되는 부분. 
 <jsp-version> 적용되는 jsp 버전 
 <short-name> 현재 태그 라이브러리의 간단한 이름 
 <uri> taglib을 고유한 것으로 만들어주는 URI 정보 
 <display-name> 출력에 사용되는 taglib 이름 
 <tag> 커스텀 태그가 위치하는 부분 
 <description> 태그 라이브러리에 대한 설명이 들어가는 부분 

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

 태그 설명 
 <name> 태그의 이름으로, 커스텀 태그 핸들러와 연결된다. 
 <tag-class> 커스텀 태그 핸들러 클래스 
 <body-content>

 태그 내 다른 태그를 가질 것인지, 아니면 JSP 문장이 올 수 있는지 등을 지정한다. 

  - empty : body가 없는 태그. <xxx />와 같이 사용한다.

  - JSP : body 내용에 JSP 코드가 올 수 있다. <xxx>JSP코드</xxx>

  - tag-dependent : 태그 핸들러에 의해 처리된다. 또 다른 커스텀 태그가 올 수 있다.

 

WebContent/ch10/MsgTagTest.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/tld/MsgTag.tld" prefix="mytag"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ch10 : 커스텀 태그 예제 - MsgTagTest</title>
</head>
<body>
<center>
<h2>ch10 : 커스텀 태그 예제 - MsgTagTest</h2>
<hr><I><mytag:hello/></I>
</center>
</body>
</html>