一 . JSP標籤體系
二 . 標籤的執行流程:
三.自訂標籤;
3.1 自訂標籤的主要作用:移除jsp中的java指令碼。它屬於jsp的技術
3.2、編寫一個自訂標籤的步驟:(傳統標籤的定義)
3.3寫一個類,直接或間接實現javax.servlet.jsp.tagext.Tag。一般通過繼承TagSupport來間接實現Tag介面
3.4、覆蓋掉父類中的對應方法
package com.itheima;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class ShowIpTag extends TagSupport {
@Override
public int doStartTag() throws JspException {
ServletRequest request = pageContext.getRequest();
String ip = request.getRemoteAddr();
JspWriter out = pageContext.getOut();
try {
out.write(ip);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
3.5在WEB-INF下面建立一個副檔名為tld的xml檔案,對自訂的標籤處理類進行描述
<?xml version="1.0" encoding="UTF-8"?>
<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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>slkdjfdsjfdsfjlks.</description>
<tlib-version>1.0</tlib-version>
<short-name>itheima</short-name>
<uri>http://www.itheima.com/jsp/myjstl</uri>
<tag>
<description>show remote ip</description>
<name>showIp</name>
<tag-class>com.itheima.ShowIpTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
3.6、在jsp中通過taglib指令引入自訂的標籤,然後使用
四、簡單標籤
1、一般需要繼承SimpleTagSupport,然後覆蓋掉doTag方法即可
2、
a、控制部分內容不輸出
<demo1>
abcd
</demo1>
doTag()方法什麼都不做。
如果要輸出的話:getJspBody().invoke(null)
b、控制標籤後面的jsp內容不輸出
throw new SkipPageException();
c、控制主體內容重複執行
在doTag方法中迴圈調用getJspBody().invoke(null)
屬性:要有setter方法,同時也要在tld檔案中進行描述
d、修改主體內容後再輸出
getJspBody().invoke(null) 要吧內容輸出到一個有緩衝的流中。
StringWriter
修改後再通過((PageContext)getJspContext).getWrtier()輸出
五、tld檔案的主要標籤和屬性
short-name:引用標籤的首碼
uri:tld檔案要綁定到一個uri的地址。可以立即為幫到一個名稱空間上
tag:描述標籤
name:標籤的名字
tag-class:標籤對應的標籤處理類的全名
body-content:標籤主體內容的類型
empty:沒有主體內容
JSP:有主體內容(用於傳統標籤)
scriptless:有主體內容(用於簡單標籤)
attribute:描述標籤的屬性
name:屬性名稱
required:是否是必須的屬性
rtexprvalue:屬性的取值是否支援運算式(EL和Java運算式)