使用自定义的标签
(1) 構思,比如寫一個對指定名字說hello的標簽,應該是<前綴:hello user="zhangsan"/>
(2) 寫類
要實現的基礎接口:javax.serlvet.jsp.tagext.SimpleTag
其中含有五個方法:
doTag ---> 實現標簽的功能 .setJspContext ---> pageContext .setParent ---> 父標簽的實現類 setJspBody ---> JspFragement getParent要實現五個方法,顯得很繁瑣,javax.servlet.jsp.tagext.SimpleTagSupport類實現了這個
基礎接口,我們在寫類時只需要繼承這個類,然后覆蓋doTag方法即可。
類如下:
package com.kettas.tag;import javax.servlet.http.*;import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*;import java.io.*; public class HelloHandler extends SimpleTagSupport{ private String user; public void setUser( String user ){ this.user = user; } public String getUser(){ return user; } @Override public void doTag() throws JspException , IOException{ PageContext ctx = (PageContext)this.getJspContext(); ctx.getOut().println( "hello " + user ); ctx.getOut().flush(); } }(3) 寫tld配置文件(位置為 : /WEB-INF/*.tld)
<?xml version="1.0" encoding="UTF-8"?><!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>2.0</jspversion> <shortname>mytag</shortname> <!-- 指定命名空間 引入標簽時使用 --> <uri>liucy@cernet.com</uri> <tag> <!-- 標簽名 --> <name>hello</name> <!-- 標簽對應的類 --> <tag-class>com.kettas.tag.HelloHandler</tag-class> <!-- 標簽體之中是否含有內容 --> <body-content>empty</body-content> <!-- 標簽屬性 --> <attribute> <name>user</name> <type>java.lang.String</type> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>(4) 在jsp文件中使用:
<%@page contentType="text/html"%><%-- 注意引入自定義標簽的方式, prefix屬性指定標簽前綴, 前綴解決不同標簽庫標簽重名 --%><%@taglib uri="liucy@cernet.com" prefix="liucy"%><html> <body> <h2> <liucy:hello user="<%= request.getParameter( "name" )%>"/> </h2> </body> </html>自定義一個循環標簽 :
類 : ===================================
package com.kettas.tag;import javax.servlet.http.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*; public class LoopHandler extends SimpleTagSupport{ private int begin; private int end; public void setBegin( int begin ){ this.begin = begin; } public int getBegin( ){ return begin; } public void setEnd(int end ){ this.end = end; } public int getEnd( ){ return end; } @Override public void doTag()throws JspException ,IOException{ // JspFragment對象可以獲取標簽體內部的內容 JspFragment f = this.getJspBody(); PageContext ctx = (PageContext)this.getJspContext(); for( int i = begin ; i < end ; i++){ f.invoke( ctx.getOut() ); } } }配置文件如下 :============================
<?xml version="1.0" encoding="UTF-8"?><!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>2.0</jspversion> <shortname>mytag</shortname> <uri>liucy@cernet.com</uri> <tag> <name>hello</name> <tag-class>com.kettas.tag.HelloHandler</tag-class> <body-content>empty</body-content> <attribute> <name>user</name> <type>java.lang.String</type> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>loop</name> <tag-class>com.kettas.tag.LoopHandler</tag-class> <!-- 標簽體內含有內容, 并且是非腳本的內容 --> <body-content>scriptless</body-content> <attribute> <name>begin</name> <type>int</type> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>end</name> <type>int</type> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>使用如下 :=====================================
<%@taglib uri="liucy@cernet.com" prefix="liucy"%><liucy:loop begin="0" end="3"> <h2>Hello!</h2> </liucy:loop>如此便可連續在網頁上輸出三個"Hello !"
轉載于:https://www.cnblogs.com/yuyu666/p/9743854.html
總結
- 上一篇: Linux Centos7网络属性配置
- 下一篇: 汇编语言从入门到精通-4标识符和表达式