최고의 JSP 커스텀 태그 튜토리얼 2024년, 이 튜토리얼에서는 는 "안녕하세요"라벨 만들기,액세스 탭 본체,사용자 정의 태그 속성,를 배울 수 있습니다.
사용자 정의 라벨은 사용자 정의 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로 처리됩니다. |
다음은 지정된 인스턴스와 연관된 속성입니다 :
koko. <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> koko.
당신이 두 가지 속성을 사용하는 경우 다음과 같이 TLD 파일을 수정 :
koko. <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> koko.