아이인포

커스텀 태그란? 본문

카테고리 없음

커스텀 태그란?

아이인포 2020. 3. 1. 01:48

커스텀 태그란?

1. JSP 페이지에 재사용 가능한 코드를 조립하는 방법
2. 자바처리에 접근하는 것으로 끝나는 XML 형태
3. 확장된 자바빈즈, 이것은 JSP 페이지 안에서 그것을 사용하기 위해 간단한 인터페이스를 가진다.
4. 자바 프로그래머와 웹 디자이너가 서로 비즈니스를 행하기 위해 만나는 교차점

 

커스텀 태그의 장점

1. JSP사이트를 유지보수하기 쉽게 한다.
2. 이식성이 있다.
3. JSP를 확장한다.
4. 웹개발속도를 높인다.

커스텀 태그의 단점

1. 태그 라이브러리에서 재사용성을 달성하려면 웹 애플리케이션에 여분의 계층이 추가되어야 한다.
웹 애플리케이션 설계시 성능저하를 고려해야 한다.
2. 오직 JSP만을 위한것이다.
서블릿이나 다른 자바 기반솔루션으로 이동하지 못한다.
3. 과다사용의 우려
JSP프로젝트의 80%는 커스텀 태그에 기초, 20% 스크립틀릿에 기초

커스텀 태그 사용하기

1. 태그 라이브러리 가져오기

URI : 태그라이브러리를 식별하는 유일한 이름이다. 종종 URL형태이다. 이 이름은 JSP 컨테이너 초기파일(web.xml)에서 미리 정의된다. PREFIX : JSP 컨테이너가 이 태그 라이브러리로부터 얻어지는 페이지에서 접두어 태그가 무엇인지 알려준다. 이름에 할당되는 규칙은 없다.

2. 태그라이브러리로부터 커스텀 태그 호출하기

<JAXP:trans>

 

 

커스텀 태그 만들기

1. 자바 객체를 생성한다.

페이지에 보낼 자바빈즈를 만드는 과정이다.

 

package com.jspinsider.jspkit.javascript;

public class JavaScriptExample extends java.lang.Object implements java.io.Serializable
{
  
    public JavaScriptExample()
    {
    }
  
    private String  start_script   ="<script language=\"JavaScript\">";
    private String  end_script     ="</script>";

    public String alert(Object aobj_data)
    { 
        return( start_script + " alert(\""  + aobj_data.toString() + "\");" + end_script);
    }
}

 

 

2. 태그 핸들러를 만든다.

태그가 실행하는 코드를 갖는다. 모든 실용적인 목적을 위해 실제 커스텀 태스를 생성하는 단계이다.
태그 핸들러가 되기 위해서는, 객체는 Tag, IterrationTag, BodyTag를 구현할 필요가 있다.
논리적인 관점에서 태그 핸들러를 만드는 것은 자바빈을 만드는 것과는 조금 다르다.
자바빈을 만들때는 공통적인 기능을 전부 모아서 만든다. 그러나 태그핸들러는 자바빈보다는 좀더 초점이 모아져 있고, 하나의 태그를 지원한다는 단일한 목적은 가진다.

 

 

package com.jspinsider.jspkit.javascript;

import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class JavaScriptExampleTag extends BodyTagSupport            //태그에 몸체에 포함된 데이터를 읽기 위해 BodyTagSupport 사용
{
    public int doEndTag() throws JspTagException
    { 
        String ls_alert   = "";
    
        try
        {   
            BodyContent lbc_bodycurrent = getBodyContent();

            if(lbc_bodycurrent != null)
            { 
                String ls_message = lbc_bodycurrent.getString();
                JavaScriptExample  JS = new JavaScriptExample();
                ls_alert = JS.alert(ls_message.trim());
            }
            pageContext.getOut().write(ls_alert);                 //JSP 페이지의 출력 스트림 조작을 위해 사용
        }

        catch (IOException e)
        { 
            throw new JspTagException("Error" + e.toString());
        } 
    return EVAL_PAGE;
    }
}

3. 태그 엑스트라인포클래스 만든다(선택사항)

TEI 클래스 또한 태그 핸들러로서 헬퍼 클래스를참조한다.

4. 태그 라이브러리 기술자 만든다

태그 라이브러리 기술자(TLD)는 커스텀 태그를 기술하고 정의하는 XML기반의 파일이다.
JSP컨테이너에게 각 태그 핸들러를 찾고 사용할 수 있는 곳을 알려주는 인덱스 파일이다.
파일명은 반드시 .tld 확장자로 저장되어야 한다.

 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
               "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>JavaScriptExampleTag</shortname>
  <uri> http://www.jspinsider.com/jspkit/javascript </uri>
  <info>A simple tag library for making a JavaScript alert   </info>

  <tag>                                                                         //커스텀 태그가 필요한 만큼 <tag> 생성해준다.
    <name>message</name>
    <tagclass>com.jspinsider.jspkit.javascript.JavaScriptExampleTag</tagclass>
    <info> Display Alert Box</info>
  </tag>   
</taglib>

 

5. JSP 컨테이너에 태그 라이브러리의 위치 알려주기

1) taglib선언이 JSP 페이지에 사용될때 TLD 파일 고유의 경로를 제공

<%@ taglib uri="/my_tag.tld" prefix="JavaScript"%>

2) 태그 라이브러리를 JAR파일로 묶는다.

<%@ taglib uri="/my_tag.jar" prefix="JavaScript"%>

3) web.xml 파일을 편집

<taglib>
   <taglib-uri>
      http://www.jspinsider.com/jspkit/javascript
   </taglib-uri>
   <taglib-location>
      /WEB-INF/JavaScriptExampleTag.tld
   </taglib-location>
</taglib>

6. JSP 페이지 만들기

<%@ taglib uri="http://www.jspinsider.com/jspkit/javascript" prefix="JavaScript"%>
<html>
<head>
</head>
  <body>

  <p>This is a simple test page</p>

  <JavaScript:message >
      This is a simple java alert message
  </JavaScript:message>
  
  </body>
</html>

태그 인터페이스

필드설명

EVAL_BODY_INCLUDE 서버에게 몸체 내용을 평가하고 그것을 출력스트림에 넣으라는 태그
SKIP_BODY 서버에게 명확하게 몸체 내용을 하나도 처리하지 말라고 알린다. doStringTag()에 의해 반환
EVAL_PAGE 서버에게 페이지의 평가를 계속한다.
SKIP_PAGE 서버에게 페이지 나머지 부분을 처리하지 말라고 알린다.

메소드설명

doStartTag 태그 핸들러가 이 핸들러 인스턴스에 대한 시작 태그를 만날 때, 서버는 모든 태그 핸들어에 대해서 이 메소드 호출
doEndTag 태그 핸들러가 이 핸들러 인스턴스에 대한 닫기 태그를 만날 때, 서버는 모든 태그 핸들러에 대해서 이 메소드를 호출




Comments