Latest web development tutorials

JSP 커스텀 태그

사용자 정의 라벨은 사용자 정의 JSP 언어 요소입니다. JSP 페이지는 사용자 정의 태그가 서블릿으로 변환됩니다 포함되어있는 경우, 개체의 레이블 변환 태그 핸들러의 동작을 호출하는 작업 웹 컨테이너 서블릿 호출을 실행 할 때, 그.

JSP 태그 확장은 새 레이블을 작성하고 JSP 페이지에 직접 삽입 할 수 있습니다. JSP 2.0 사양은 이러한 사용자 정의 태그를 작성하는 간단한 태그 핸들러를 소개했다.

당신은 SimpleTagSupport 클래스를 상속하고 간단한 사용자 지정 라벨을 개발하기 위해 doTag () 메소드를 오버라이드 (override) 할 수 있습니다.


는 "안녕하세요"라벨 만들기

다음으로, 우리라는 사용자 지정 레이블을 만들려면 <예 : 안녕하세요> 태그 형식 :

<ex:Hello />

사용자 정의 JSP 태그를 만들려면 먼저 자바 클래스와 레이블 계약을 작성해야합니다. 그래서, 다음의가하는 HelloTag 클래스를 만들 수 있습니다 :

package com.w3big;

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

public class HelloTag extends SimpleTagSupport {

  public void doTag() throws JspException, IOException {
    JspWriter out = getJspContext().getOut();
    out.println("Hello Custom Tag!");
  }
}

다음 코드는 doTag () 메소드를 오버라이드 (override), 방법은 "안녕하세요 사용자 정의 태그를!"현재 JspContext 개체를 얻을 수 getJspContext () 메소드를 사용하고,의 JspWriter 객체에 전달됩니다.

위의 클래스를 컴파일하고,이 환경 변수 CLASSPATH 디렉토리에 복사합니다. <톰캣 설치 디렉토리> 웹 응용 ROOT의 \ WEB-INF \의 custom.tld \ : 마지막으로, 다음의 태그 라이브러리를 만들 수 있습니다.

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.w3big.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

다음으로, 우리는 JSP 파일의 안녕 태그를 사용할 수 있습니다 :

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello/>
  </body>
</html>

위 프로그램의 출력은 다음과 같습니다

Hello Custom Tag!

액세스 탭 본체

같은 표준 태그 라이브러리 레이블에 메시지 내용을 포함처럼 당신은 할 수 있습니다. 우리는 안녕 콘텐츠를 포함 할으로 다음과 같이 우리는 사용자 정의 형식은 다음과 같습니다

<ex:Hello>
   This is message body
</ex:Hello>

다음과 같이 우리는 태그 핸들러 클래스 파일을 수정할 수 있습니다 :

package com.w3big;

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

public class HelloTag extends SimpleTagSupport {

   StringWriter sw = new StringWriter();
   public void doTag()
      throws JspException, IOException
    {
       getJspBody().invoke(sw);
       getJspContext().getOut().println(sw.toString());
    }

}

다음에 우리는 다음과 같이 TLD 파일을 수정해야합니다 :

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.w3big.HelloTag</tag-class>
    <body-content>scriptless</body-content>
  </tag>
</taglib>

다음과 같이 이제 우리는 JSP에서 수정 된 라벨을 사용할 수 있습니다 :

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello>
        This is message body
    </ex:Hello>
  </body>
</html>

다음과 같이 위의 프로그램의 출력은 다음과 같습니다

This is message body

사용자 정의 태그 속성

다음과 같이 setter 메소드를 구현해야합니다, 사용자 정의 태그 클래스의 값을 속성을 받기 위해, 다양한 특성에 맞춤 기준을 설정할 수 있습니다, 자바 빈즈 setter 메소드는 다음과 같습니다

package com.w3big;

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

public class HelloTag extends SimpleTagSupport {

   private String message;

   public void setMessage(String msg) {
      this.message = msg;
   }

   StringWriter sw = new StringWriter();

   public void doTag()
      throws JspException, IOException
    {
       if (message != null) {
          /* 从属性中使用消息 */
          JspWriter out = getJspContext().getOut();
          out.println( message );
       }
       else {
          /* 从内容体中使用消息 */
          getJspBody().invoke(sw);
          getJspContext().getOut().println(sw.toString());
       }
   }

}

속성의 이름은 "메시지", 그래서 세터가 SetMessage () ()이다. 이제이 속성을 추가 할 TLD 파일 <속성> 요소를 사용하자 :

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.w3big.HelloTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
       <name>message</name>
    </attribute>
  </tag>
</taglib>

아래 그림과 같이 이제 우리는 JSP 파일에 메시지 속성을 사용할 수 있습니다 :

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello message="This is custom tag" />
  </body>
</html>

출력은 위의 데이터의 예 :

This is custom tag

당신은 또한 다음과 같은 속성을 포함 할 수 있습니다 :

재산 기술
이름 속성의 이름을 정의합니다. 각 태그는 속성 이름은 고유해야합니다.
필요 잘못된 선택으로 설정하면 속성이, 필수 또는 선택 여부를 지정합니다.
rtexprvalue 당신이 문 식을 실행하면, 태그 속성은 유효합니다.
유형 속성의 Java 클래스 유형을 정의합니다. 기본값은문자열로 지정
기술 기술
파편 당신이 재산을 선언하면, 속성 값은JspFragment로 처리됩니다.

다음은 지정된 인스턴스와 연관된 속성입니다 :

.....
    <attribute>
      <name>attribute_name</name>
      <required>false</required>
      <type>java.util.Date</type>
      <fragment>false</fragment>
    </attribute>
.....

당신이 두 가지 속성을 사용하는 경우 다음과 같이 TLD 파일을 수정 :

.....
    <attribute>
      <name>attribute_name1</name>
      <required>false</required>
      <type>java.util.Boolean</type>
      <fragment>false</fragment>
    </attribute>
    <attribute>
      <name>attribute_name2</name>
      <required>true</required>
      <type>java.util.Date</type>
    </attribute>
.....