사용자 정의 태그는 사용자 정의 JSP 언어 요소입니다. JSP 페이지에 서블릿으로 변환되는 사용자 정의 태그가 포함되어 있으면 태그는 서블릿이 실행될 때 웹 컨테이너가 호출하는 태그 핸들러라는 개체에 대한 작업으로 변환됩니다.
JSP 태그 확장을 사용하면 새 태그를 생성하고 이를 JSP 페이지에 직접 삽입할 수 있습니다. 이러한 사용자 정의 태그를 작성하기 위해 단순 태그 핸들러가 JSP 2.0 사양에 도입되었습니다.
SimpleTagSupport 클래스를 상속하고 doTag() 메서드를 재정의하여 가장 간단한 사용자 정의 태그를 개발할 수 있습니다.
다음으로, 다음 형식으로 <ex:Hello>라는 사용자 정의 태그를 생성하려고 합니다.
<예:안녕하세요 />
사용자 정의 JSP 태그를 생성하려면 먼저 태그를 처리하는 Java 클래스를 생성해야 합니다. 그럼 다음과 같이 HelloTag 클래스를 생성해 보겠습니다.
패키지 com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag 확장 SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("안녕하세요 맞춤 태그!");
다음 코드는 getJspContext() 메소드를 사용하여 현재 JspContext 객체를 얻고 "Hello Custom Tag!"를 JspWriter 객체에 전달하는 doTag() 메소드를 다시 작성합니다.
위 클래스를 컴파일하고 환경 변수 CLASSPATH 디렉터리에 복사합니다. 마지막으로 <Tomcat 설치 디렉터리> webappsROOTWEB-INFcustom.tld 태그 라이브러리를 생성합니다.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>예제 TLD</short-name> <tag> <name>안녕하세요</name > <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>비어 있음</body-content> </tag></taglib>
다음으로 JSP 파일에서 Hello 태그를 사용할 수 있습니다.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>샘플 사용자 정의 태그</title> </head> <body> <ex:Hello /> </body></html>
위 프로그램의 출력은 다음과 같습니다.
안녕하세요 맞춤 태그입니다!
표준 태그 라이브러리와 마찬가지로 태그에 메시지 내용을 포함할 수 있습니다. 사용자 정의된 Hello에 콘텐츠를 포함하려는 경우 형식은 다음과 같습니다.
<ex:Hello> 메시지 본문입니다</ex:Hello>
라벨 처리 클래스 파일을 수정할 수 있으며 코드는 다음과 같습니다.
package com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag 확장 SimpleTagSupport { StringWriter sw = new StringWriter(); ) 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>본문이 포함된 TLD 예시</short-name> <tag> <name>Hello< /name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>스크립트 없음</body-content> </tag></taglib>
이제 아래와 같이 JSP에서 수정된 태그를 사용할 수 있습니다.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>샘플 사용자 정의 태그</title> </head> <body> <ex:Hello > 메시지 본문입니다 </ex:Hello> </body></html>
위 프로그램의 출력은 다음과 같습니다.
메시지 본문입니다
사용자 정의 표준에서 다양한 속성을 설정할 수 있습니다. 속성을 받으려면 값 사용자 정의 태그 클래스가 JavaBean의 setter 메소드를 구현해야 합니다.
package com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag 확장 SimpleTagSupport { private String 메시지; public void setMessage(String msg) this.message = msg; } StringWriter sw = new StringWriter()가 발생합니다. JspException, IOException { if (message != null) { /* 속성의 메시지 사용 */ JspWriter out = getJspContext().getOut(); out.println( message ) } else { /* 속성의 메시지 사용 콘텐츠 본문 */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()) } }}
속성 이름은 "message"이므로 setter 메서드는 setMessage()입니다. 이제 TLD 파일에 사용되는 <attribute> 요소에 이 속성을 추가해 보겠습니다.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>본문이 포함된 TLD 예시</short-name> <tag> <name>Hello< /name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>스크립트 없음</body-content> <attribute> <name>message</name> </attribute> </tag></taglib>
이제 JSP 파일에서 메시지 속성을 다음과 같이 사용할 수 있습니다.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>샘플 사용자 정의 태그</title> </head> <body> <ex:Hello message="맞춤 태그입니다." /> </body></html>
위 예제 데이터의 출력 결과는 다음과 같습니다.
맞춤 태그입니다.
다음 속성도 포함할 수 있습니다.
재산 | 설명하다 |
---|---|
이름 | 속성의 이름을 정의합니다. 속성 이름은 각 태그마다 고유해야 합니다. |
필수의 | 속성이 필수인지 선택인지 지정합니다. false로 설정하면 선택 사항입니다. |
rtexpr값 | 표현식을 실행할 때 label 속성이 유효한지 여부를 선언합니다. |
유형 | 이 속성을 정의하는 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>.....