標籤:擷取 tle 頁面 ast end 檔案內容 內容 java代碼 required
自訂標籤的作用:替換JSP頁面的java代碼
步驟:1.標籤處理類(標籤是一個對象,那也就需要先有類)
2.tld檔案 它是一個xml(可以向c標籤裡借),一般放到WEB-INF下,不讓用戶端瀏覽器看到
核心配置<tag>
<name>myTag</name>
<tag-class>com.jiangbei.tag.MyTag</tag-class>
<body-content>empty</body-content>
</tag>
【注意tag-class裡面的對應的類記得改!】
3.使用<%@taglib%>指定tld檔案路徑
例如:
標籤處理類:
public class MyTag implements SimpleTag{ private PageContext pageContext; private JspFragment body; @Override public void doTag() throws JspException, IOException { // 想要向頁面輸出,需要out,pageContext一個頂九個,可以得到out pageContext.getOut().print("Hello World"); } @Override public JspTag getParent() { // TODO Auto-generated method stub return null; } @Override public void setJspBody(JspFragment jspBody) { this.body = jspBody; } @Override public void setJspContext(JspContext pc) { //伺服器傳過來給他儲存起來 this.pageContext = (PageContext) pc; } @Override public void setParent(JspTag parent) { // TODO Auto-generated method stub }}
在此目錄下建立tld檔案
檔案內容如下:
<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>itcast</short-name> <uri>http://www.itcast.cn/tags/1.0</uri> <tag> <name>myTag</name> <tag-class>com.jiangbei.tag.MyTag</tag-class> <body-content>empty</body-content> </tag> <tag> <name>myTag2</name> <tag-class>com.jiangbei.tag.MyTag2</tag-class> <body-content>empty</body-content> </tag> <tag> <name>myTag3</name> <tag-class>com.jiangbei.tag.MyTag3</tag-class> <body-content>scriptless</body-content> </tag> <tag> <name>myTag4</name> <tag-class>com.jiangbei.tag.MyTag4</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag></taglib>
直接繼承類而避免直接實現介面:
public class MyTag3 extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { //擷取流,為了執行的參數輸出 Writer out = this.getJspContext().getOut(); out.write("********************<br/>"); //執列標籤體內容,寫到指定的流中(頁面上) this.getJspBody().invoke(out); out.write("<br/>********************"); } }
標籤處理類(JspFragment jsp片段,就是內容)
實現simpleTag介面:5個方法(當然不會你自己調用,tomcat幫你調用)
doTag()每次執列標籤時都會調用這個方法,會在其它方法之後被tomcat調用
set/getParent 操作父標籤的方法,其中get為非聲明周期方法
setJspBody(JspFragment jspBody)
void setJspContext(JspContext pc)
當然,有時候實現介面是非常不方便的,於是就有了一個類給我們繼承
SimpleTagSupport,已經幫我們把東西都存好了,並且提供了get方法
供子類調用
標籤體內容支援的類型
empty
JSP:已經不支援!(標籤體內容可以是JAVA指令碼、EL運算式等)
scriptless 是EL運算式(當然一般字元串也是可以得)
第四種無用!
可以使用在標籤處理類doTag()方法中throw new SkipPageException,
tomcat認識這個標籤,它會進行捕獲。後面的不會再執行
work目錄下看真身可以看到實現究竟
可以給標籤添加屬性:
給標籤處理類添加屬性
在tld檔案中對屬性進行配置(都見WEB-INF下的tlds的itcast_tld)
rtexprvalue:運行時運算式值,就是可不可以是EL運算式值
JavaWeb基礎—JSP自訂標籤入門