自定義標簽是用戶定義的JSP語言元素。當JSP頁面包含一個自定義標簽時將被轉化為servlet,標簽轉化為對被 稱為tag handler的對象的操作,即當servlet執行時Web container調用那些操作。
JSP標簽擴展可以讓你創建新的標簽並且可以直接插入到一個JSP頁面。 JSP 2.0規范中引入Simple Tag Handlers來編寫這些自定義標記。
首先你可以繼承SimpleTagSupport類並重寫的doTag()方法來開發一個最簡單的自定義標簽。
這裡要注意的是這裡的Selvlet類不能是裸體類,也就是必須要在包裡面,不然後面配置文件不生效
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
public class MyServlet extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
JspWriter out = this.getJspContext().getOut();//獲得當前頁面的輸出流
out.println("Hello World!");//輸出Hello World!
}
}
接下來在WEB-INF目錄下寫一個標簽庫,以tld後綴名結尾,這裡寫mytag.tld
2.0
ex
Hello
com.mytag.MyServlet
empty
接下來就是測試用的jsp頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--這裡prefix是標簽前綴名 uri是標簽庫地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<%--使用自定義標簽--%>
這樣頁面就會輸出Hello World!了
訪問標簽體,這樣的話就需要修改以上三個文件了
Selvlet中要有對標簽體獲取的代碼
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
public class MyServlet extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
StringWriter sw = new StringWriter();//字符串輸出流,包裝一個字符串
getJspBody().invoke(sw);//把標簽體內容放入sw流裡面
getJspContext().getOut().println(sw);//輸出到頁面上
}
}
接著mytag.tld中要設置標簽體不為空
<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%2D%2D%3E--> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>2.0</tlib-version> <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E5%89%8D%E7%BC%80%E5%90%8D%2C%E5%8F%AF%E4%BB%A5%E5%9C%A8jsp%E5%A3%B0%E6%98%8E%E4%B8%AD%E6%9B%B4%E6%94%B9%2D%2D%3E--> <short-name>ex</short-name> <tag> <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E6%A0%87%E7%AD%BE%E5%90%8D%E7%A7%B0%2D%2D%3E--> <name>Hello</name> <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E9%82%A3%E4%B8%AAServlet%E6%89%A7%E8%A1%8C%E8%BF%99%E4%B8%AA%E6%A0%87%E7%AD%BE%E8%A7%A3%E9%87%8A%2D%2D%3E--> <tag-class>com.mytag.MyServlet</tag-class> <!--{cke_protected}{C}%3C!%2D%2D%E8%AE%BE%E7%BD%AE%E6%A0%87%E7%AD%BE%E4%BD%93%E4%B8%BA%E7%A9%BA%2D%2D%3E--> <body-content>scriptless</body-content> </tag> </taglib></code>
最後是測試用的jsp頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--這裡prefix是標簽前綴名 uri是標簽庫地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<%--使用自定義標簽--%> hahahhahahahhah
頁面上就會輸出hahahhahahahhah
另外還有自定義標簽屬性,不經常使用,這裡就不在詳細說了