一:國慶結束了,回來上班,結果老大說過兩天才出差,因此這兩天就用來補本身不太懂的知識或者之前沒有熟悉的知識,jsp的標籤就是,由於在項目中本身封裝了一些標籤,可是我本身只是會用,真正的原理性的東西我仍是不是很明白,因此今天一天的時間基本上都是在網上找資料來熟悉jsp標籤的知識。javascript
二:標籤中tld中的屬性rtexprvalue的用處html
rtexprvalue的全稱是 Run-time Expression Value,網上說是否能夠利用jsp表達式。java
rtexprvalue表示標籤中的值是否能夠直接指定或者能夠動態(使用腳本或者el表達式)指定;linux
reruired表示是不是必須的;web
下面說一說具體的用法,先給出tld中的定義以下:瀏覽器
<?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" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <description><![CDATA[自定義標籤]]]]></description> <display-name>my Tags</display-name> <tlib-version>0.1</tlib-version> <short-name>my</short-name> <uri>/mytag</uri> <tag> <!--此處是有些內容咱們不想讓xml的解析引擎解析執行,而是當作原始內容處理,此時咱們能夠把該部分xml的內容放在CDATA區域的內容中,xml解析程序不會處理,而是原封不動的輸出,這裏咱們就是想在jsp頁面在給該屬性賦值時把鼠標放在該該屬性上時顯示該提示內容--> <description><![CDATA[顯示我的姓名]]></description>
<!-- 標籤的名稱--> <name>wh</name> <tag-class>org.wh.gsh.web.tag.PersonTag</tag-class> <body-content>JSP</body-content> <attribute> <description><![CDATA[顯示我的姓名]]></description>
<!--屬性名稱--> <name>personbh</name>
<!--是不是必須的屬性--> <required>true</required>
<!--見上面--> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description><![CDATA[所屬部門]]</description> <name>departmen</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag>
<body-content>元素能夠設置的內容有3種。less
<body-content>jsp
jsp頁面的用法以下:元素主要的功能是指定標籤體的類型,可能的取值有如下4種。學習
(1)empty:沒有標籤體測試
(2)JSP:標籤體能夠包含文本、EL、表達式或者JSP標籤,但對於簡單標籤無效。
(3)scriptless:標籤體能夠包含文本、EL表達式、JSP標籤,但不能包含JSP的腳本元素。
(4)tagdependent:表示標籤體交由標籤自己去解析處理。若指定tagdependent,在標籤體中的全部代碼都會原封不動的交給標籤處理器,而不是將執行結果傳遞給標籤處理器。
上面所說的標籤體是這麼個意思:若是標籤寫成這樣<my:wh/>---->表示沒有標籤體,若是寫成這樣<my:wh></my:wh>則有標籤體
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="my" uri="/mytag" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>我的信息頁面</title> <body> <my:wh personbh="${p.bh}" department='1'></my:wh> <!-- 這裏的personbh的值能夠用直接指定或者是動態的綁定(由於<rtexprvalue>true</rtexpvalue>的值爲true)--> <!-- 而department的值卻只能直接指定,不能動態綁定若是寫成這樣的話就是錯誤的 <my:wh personbh="${p.bh}" department='"${p.depid}"></my:wh>--> ---->false </body>
三:標籤返回值的效果及意義:
在TagSupport類中,有以下4個方法最重要:doStartTag(),doEndTag(),doAfterTag(),release()
(1)doStartTag():此方法是開始執行標籤,有以下兩種返回值:
SKIP_BODY:表示忽略標籤體的內容,而將執行權交給doEndTag()方法,
EVAL_BODY_INCLUDE:表示執行標籤體的內容。
(2)doAfterTag():此方法是IterationTag接口與Tag接口的差異所在,用來重複執行標籤體的內容,有以下兩種返回值
SKIP_BODY:表示忽略標籤體的內容,而且將執行權交給doEndTag()方法;
EVAL_BODY_AGAIN:表示重複執行標籤體內容,會重複調用doAfterBody()方法,一直循環執行下去,直到doAfterBody()方法但會SKIP_BODY爲止。
(3)doEndTag():此方法在標籤結束時執行,有以下兩種返回值
SKIP_PAGE:在JSP頁面應該馬上中止執行(便是不執行下面的jsp代碼),並將全部的輸出馬上回傳到瀏覽器上。
EVAL_PAGE:表示jsp正常的運行
四:TagSupport和BodyTagSupport的區別
TagSupport和BodyTagSupport的區別主要是標籤處理類是否須要與標籤體交互,若是不須要交互的就用TagSupport,不然若是須要交互就用BodyTagSupport。
交互的意思大概能夠理解成標籤處理類是否要讀取標籤體的內容和改變標籤體返回的內容。再說明白點就是若是要更改或者處理標籤體中的內容則必須實現BodyTagSupport類。(標籤裏面均可以有內容,可是要更改內容或做其餘處理就必須實現BodyTagSupport類);
下面說說BodyTagSupport新增了的方法
public static final int EVAL_BODY_BUFFERED :表示該標籤體的內容應該被出倆,全部的處理都應該保存到BodyContent類中;
protected BodyContent bodyContent :存放處理結果
public JspWriter getPreviousOut() :取得JspWriter的輸出流對象
好比下面的代碼就是把標籤體中的截取一部分進行顯示,代碼以下
MyTag.java package org.wh.demo.Tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTag; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.Tag; public class MyTag extends BodyTagSupport { /** * */ private static final long serialVersionUID = 1L; public int doStartTag() throws JspException{ return BodyTag.EVAL_BODY_BUFFERED; } public int doEndTag() throws JspException{ BodyContent bc=this.getBodyContent();//獲取標籤體的內容 String ct=bc.getString();//轉換爲字符串 String rt=ct.substring(5,10); try{ this.pageContext.getOut().write(rt); }catch(Exception e){ throw new RuntimeException(e); } return Tag.EVAL_PAGE; } }
mytag.tld <?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" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <description>標籤的測試</description> <display-name>my tags</display-name> <tlib-version>0.0</tlib-version> <short-name>my</short-name> <uri>/mytags</uri> <tag> <description><![CDATA[本身定義的標籤]]></description> <name>wh</name> <tag-class>org.wh.demo.Tag.MyTag</tag-class> <body-content>scriptless</body-content><!--這裏用JSP或者scriptless都行,具體的在上年已經作了說明--> </tag> </taglib>
HelloTag.jsp:
<%@ page language="java" contentType="text/html; charset=GBk" pageEncoding="GBK"%> <%@taglib uri="/mytags" prefix="my" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>Hello Tag!!!</h1> <h2>本身定義的標籤使用以下效果</h2> <my:wh>這是我寫的第一個標籤</my:wh> </body> </html>
結果以下:
我如今就是知道怎麼用了,之前本身只是只看不作的人,如今本身在邊看邊實踐,即便是最簡單的東西,只是仍是極少成多的。如今就補下基礎薄弱的地方。本身作一遍比看幾百遍都強的。本身仍是得花時間來學習下源碼,最忌就再次溫習下java和java web 和linux,好多東西要學,這幾天沒事情幹就總結了這兩個月實習學到的東西和補知識點。任重而道遠啊。努力,今天看小說看到了一句話」匹夫而爲百世師,一言二爲天下法「,這氣概,沒得說啊,收到短信要交一篇3000字的論文,坑爹啊,我還得去找論文湊一篇交上去。努力吧,boys!!!