偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JSP標(biāo)記學(xué)習(xí)筆記淺析

開發(fā) 后端
JSP標(biāo)記學(xué)習(xí)筆記是學(xué)習(xí)JSP標(biāo)記的一個(gè)歸納總結(jié),那么本文就將向你講述在JSP標(biāo)記學(xué)習(xí)過程中所要注意的問題。

1.概述

1)什么是JSP標(biāo)記

顧名思義,JSP標(biāo)記就是在JSP文件中使用的標(biāo)記。它類似于html語法中的標(biāo)記,像head、table。通過在JSP文件中引用它(就像使用html標(biāo)記那樣),可以更方便的實(shí)現(xiàn)對Java代碼模塊的重用。

2)為什么要使用JSP標(biāo)記技術(shù)(與javabean相比)

好處

JSP標(biāo)記可以處理JSP正文的內(nèi)容,比如改變文本顯示樣式;而javabean不可以。

JSP標(biāo)記接口簡單,易于使用,也易于開發(fā)和維護(hù)。

壞處

JSP標(biāo)記在進(jìn)行設(shè)置時(shí)要比javabean復(fù)雜很多,體現(xiàn)在JSP標(biāo)記庫描述文件(*.tld)的配置上。

JSP標(biāo)記實(shí)現(xiàn)的功能遠(yuǎn)不如javabean強(qiáng)大。

當(dāng)前只要JSP1.1支持JSP標(biāo)記,而JSP1.0和1.1都支持對Bean的使用。

2.JSP標(biāo)記的開發(fā)簡介。

JSP標(biāo)記的開發(fā)需要編寫2種獨(dú)立的文件。一種是定義標(biāo)記功能的java類文件,一種是將xml元素名稱(標(biāo)記)映射到標(biāo)記實(shí)現(xiàn)的標(biāo)記庫描述符文件。

⑴編寫JSP標(biāo)記處理程序類文件

需要繼承javax.servlet.jsp.tagext.TagSupport類;

簡單示例:

  1. //文件名ExampleTag.java  
  2.  
  3. importjavax.servlet.jsp.*&#59;  
  4.  
  5. importjavax.servlet.jsp.tagext.*&#59;  
  6.  
  7. importjava.io.*&#59;  
  8.  
  9.  
  10.  
  11. publicclassExampleTagextendsTagSupport{  
  12.  
  13. //程序的執(zhí)行起始點(diǎn)  
  14.  
  15. publicintdoStartTag(){  
  16.  
  17. try{  
  18.  
  19. JspWriterout=pageContext.getOut()&#59;  
  20.  
  21. out.print(“Customtagexample”)&#59;  
  22.  
  23. }catch(IOExceptionioe){  
  24.  
  25. System.out.println(“ErrorinExampleTag:“+ioe)&#59;  
  26.  
  27. }  
  28.  
  29. return(SKIP_BODY)&#59;//當(dāng)標(biāo)記包括的內(nèi)容為空時(shí)返回SKIP_BODY,表示標(biāo)記功能  
  30.  
  31. //已執(zhí)行完成  
  32.  
  33. }  
  34.  

編譯好的class文件將位于服務(wù)器的的特定位置。

⑵編寫JSP標(biāo)記庫描述符文件

將標(biāo)記名和其代表的功能實(shí)現(xiàn)聯(lián)系在一起。

簡單示例:

  1. ﹤!--文件名:csajsp-taglib.tld--﹥;  
  2.  
  3. ﹤?xmlversion=”1.0”encoding=”ISO-8859-1”?﹥;  
  4.  
  5. ﹤!DOCTYPEtaglib  
  6.  
  7. PUBLIC“-//SunMicrosystem,Inc.//DTDJSPTagLibrary1.1//EN”  
  8.  
  9. http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd﹥;  
  10.  
  11. //以上是標(biāo)準(zhǔn)的文件頭  
  12.  
  13. //以下是標(biāo)簽庫描述  
  14.  
  15. ﹤tlibversion﹥;1.0﹤/tlibversion﹥;//Tag庫的版本  
  16.  
  17. ﹤jspversion﹥;1.1﹤/jspversion﹥;//JSP庫的版本  
  18.  
  19. ﹤shortname﹥;csajsp﹤/shortname﹥;//自定義標(biāo)記前綴名  
  20.  
  21. ﹤uri﹥;﹤/uri﹥;//標(biāo)記描述符文件的uri,可以是空  
  22.  
  23. ﹤info﹥;Mycustomtag!﹤/info﹥;//標(biāo)記庫的描述信息  
  24.  
  25. //以下定義新標(biāo)記  
  26.  
  27. ﹤tag﹥;  
  28.  
  29. ﹤name﹥;example﹤/name﹥;//自定義的標(biāo)記名  
  30.  
  31. ﹤tagclass﹥;tags.ExampleTag﹤/tagclass﹥;//定位標(biāo)簽處理類文件  
  32.  
  33. ﹤info﹥;Simplestexample﹤/info﹥;//描述信息  
  34.  
  35. ﹤bodycontent﹥;EMPTY﹤/bodycontent﹥;//不處理JSP文件正文內(nèi)容  
  36.  
  37. ﹤/tag﹥;  
  38.  
  39. ﹤/taglib﹥; 

此文件將配置在服務(wù)器的特定位置

⑶使用以上自定義的JSP標(biāo)記

  1. ﹤!--文件名:simpleExample.jsp--﹥;  
  2.  
  3. ﹤!DOCTYPEHTMLPUBLIC“-//W3C//DTDHTML4.0Transitional//EN”﹥;  
  4.  
  5. ﹤HTML﹥;  
  6.  
  7. ﹤HEAD﹥;  
  8.  
  9. ﹤%@tagliburi=“csajsp-taglib.tld”prefix=“csajsp”%﹥;//進(jìn)行標(biāo)記使用聲明  
  10.  
  11. ﹤TITLE﹥;﹤csajsp:example/﹥;﹤TITLE﹥;  
  12.  
  13. LINKREL=STYLESHEETHREF=”JSP-styles.css”  
  14.  
  15. TYPE=”text/css”﹥;  
  16.  
  17. ﹤HEAD﹥;  
  18.  
  19. ﹤BODY﹥;  
  20.  
  21. ﹤H1﹥;﹤csajsp:example/﹥;﹤H1﹥;/使用標(biāo)記  
  22.  
  23. ﹤csajsp:example/﹥;  
  24.  
  25. ﹤/BODY﹥;  
  26.  
  27. ﹤/HTML﹥;  
  28.  

這樣最終在在瀏覽器上輸出為

Customtagexample

3.深入的JSP標(biāo)記開發(fā)

⑴添加標(biāo)記屬性

在標(biāo)記處理類中可以通過函數(shù)setAttribute(Stringvalue)為JSP標(biāo)記分配屬性,這樣標(biāo)記處理程序根據(jù)獲取的屬性值來實(shí)現(xiàn)相關(guān)功能。

比如:

  1. privateStringmessage=“DefaultMessage”&#59;  
  2.  
  3. publicvoidsetMessage(Stringmessage){  
  4.  
  5. this.message=message&#59;  
  6.  

注意:屬性名message是小寫的,設(shè)置函數(shù)中的Message是大寫的。

◆與之相關(guān)的在tld文件中需要在tag元素中添加如下元素

  1. ﹤tag﹥;  
  2.  
  3. …  
  4.  
  5. ﹤attribute﹥;  
  6.  
  7. ﹤name﹥;message﹤/name﹥;//屬性名  
  8.  
  9. ﹤required﹥;false﹤/requied﹥;//屬性值是否必須提供。False表示不必,存在缺省值。  
  10.  
  11. ﹤rtexprvalue﹥;true﹤/rtexprvalue﹥;//ture表示屬性值可以使用JSP表達(dá)式,false表示禁  
  12.  
  13. //止使用  
  14.  
  15. ﹤/attribute﹥;  
  16.  
  17. …  
  18.  
  19. ﹤/tag﹥; 

◆對應(yīng)JSP文件中引用為:﹤prefix:namemessage=“Hello!”/﹥;

⑵使用標(biāo)記正文

即是在標(biāo)記中使用一些包含JSP腳本元素、文本等的內(nèi)容,這些內(nèi)容由JSP引擎處理。

形式如下:

﹤prefix:tagname﹥;body(正文內(nèi)容)﹤prefix:tagname﹥;

在處理JSP標(biāo)記的正文前,將會(huì)調(diào)用處理程序的doStartTag()方法,此時(shí)要在此方法中返回EVAL_BODY_INCLUDE以表明包含有標(biāo)記正文;處理完后,將會(huì)調(diào)用doEndTag()方法,此后要讓jsp引擎繼續(xù)處理后面的頁面,得返回EVAL_PAGE,否則返回SKIP_PAGE。

◆對應(yīng)在tld文件中需要在tag元素中添加如下元素

  1. ﹤tag﹥;  
  2.  
  3. …  
  4.  
  5. ﹤bodycontent﹥;JSP﹤/bodycontent﹥;//表明包含正文  
  6.  
  7. …  
  8.  
  9. ﹤/tag﹥; 

另外:可以設(shè)置一些條件來判斷是否包含正文的,如下:

  1. publicintdoStartTag(){  
  2.  
  3. ServletRequestrequest=pageContext.getRequest()&#59;  
  4.  
  5. StringdebugFlag=request.getParameter(“debug”)&#59;  
  6.  
  7. If((debugFlag!=null)&&(!debugFlag.equalsIgnoreCase(“false”))){  
  8.  
  9. Return(EVAL_BODY_INCLUDE)&#59;  
  10.  
  11. }  
  12.  
  13. else{  
  14.  
  15. return(SKIP_BODY)&#59;  
  16.  
  17. }  
  18.  

這樣只有在url尾部給出請求參數(shù)值debug=true,才會(huì)顯示標(biāo)記正文的內(nèi)容。這樣可以隱藏一些調(diào)試信息。

⑶對標(biāo)記正文進(jìn)行處理

JSP的標(biāo)記可以對包含的正文進(jìn)行處理(修改),然后再輸出。這需要標(biāo)記處理類繼承BodyTagSupport類(TagSupport類的繼承)。這個(gè)類提供了2個(gè)重要的方法用于正文處理。

→doAfterBody:默認(rèn)執(zhí)行的方法,在此方法中包含正文的處理過程。

→getBodyContent:返回BodyContent類型的的對象,此對象包含了有關(guān)標(biāo)記正文的信息。

BodyContent類型包含的重要方法:

→getEnclosingWriter:返回JspWriter方法,輸出內(nèi)容。

→getString:返回包含全部JSP標(biāo)記正文的字符串。

注意:這里和⑵中介紹的輸出JSP標(biāo)記正文的方式不一樣。前者的輸出是先由JSP引擎解釋,這里是在JSP標(biāo)記處理程序中直接輸出到給瀏覽器。

另外,在doAferBody中返回SKIP_BODY,表示終止標(biāo)記正文處理;若返回的是EVAL_BODY_TAG,將會(huì)再一次調(diào)用doAferBody方法,重新處理標(biāo)記正文,直到返回SKIP_BODY為止。

示例:

→標(biāo)記處理程序片:

下面的程序片將調(diào)用一個(gè)filter方法,此方法用于把JSP正文中的字符﹤﹥;“&分別用&it&#59;&gt&#59;&guot&#59;&amp&#59;來代替。以使瀏覽器按字符原樣輸出,不進(jìn)行解釋。

  1. publicclassFillterTagextendsBodyTagSupport{  
  2.  
  3. publicintdoAfterBody(){  
  4.  
  5. BodyContentbody=getBodyContent()&#59;  
  6.  
  7. StringfilteredBody=ServletUtilities.filter(body.getString())&#59;//將正文得到的字符串過濾  
  8.  
  9. Try{  
  10.  
  11. JspWriterout=body.getEnclosingWriter()&#59;  
  12.  
  13. out.print(filteredBody)&#59;//輸出過濾后的文本  
  14.  
  15. }catch(IOExceptionioe){  
  16.  
  17. System.out.println(“ErrorinFilterTag:“+ioe)&#59;  
  18.  
  19. }  
  20.  
  21. return(SKIP_BODY)&#59;//終止JSP正文處理  
  22.  

→標(biāo)記符描述文件片

  1. …  
  2.  
  3. ﹤tag﹥;  
  4.  
  5. ﹤name﹥;filter﹤/name﹥;  
  6.  
  7. ﹤tagclass﹥;tags.FilterTag﹤/tagclass﹥;  
  8.  
  9. ﹤bodycontent﹥;JSP﹤/bodycontent﹥;  
  10.  
  11. ﹤/tag﹥;  
  12.  
  13. … 

→JSP文件片

  1. ﹤csajsp:filter﹥;  
  2.  
  3. ﹤STRONG﹥;Iloveyou!﹤/STRONG﹥;  
  4. ;  
  5.  
  6. ﹤EM﹥;Iloveyou!﹤EM﹥;  
  7.  
  8. ﹤/csajsp:filter﹥; 

這樣,在瀏覽器中輸出的標(biāo)記正文應(yīng)當(dāng)是

  1. ﹤STRONG﹥;Iloveyou!﹤/STRONG﹥;  
  2. ;  
  3.  
  4. ﹤EM﹥;Iloveyou!﹤EM﹥; 

而不是

Iloveyou!

Iloveyou!

⑶使用JSP嵌套標(biāo)記。

可以對多個(gè)JSP標(biāo)記進(jìn)行嵌套引用,這樣子標(biāo)記就可以訪問和存儲(chǔ)父標(biāo)記的數(shù)據(jù)和方法。

子標(biāo)記訪問父標(biāo)記需要使用BodyTagSupport類中的findAccetorWithClass方法。注意它只能查找臨近的父標(biāo)記。

假如在JSP文件中如下的嵌套引用:

 

  1. ﹤!--此嵌套標(biāo)記模擬條件判斷--﹥;  
  2.  
  3. ﹤csajsp:if﹥;  
  4.  
  5. ﹤csajsp:condition﹥;true﹤/csajsp:condition﹥;  
  6.  
  7. ﹤csajsp:then﹥;Conditionwastrue﹤/csajsp:then﹥;  
  8.  
  9. ﹤csajsp:else﹥;Conditionwasfalse﹤/csajsp:else﹥;  
  10.  
  11. ﹤/csajsp:if﹥;  
  12.  
  13. 相應(yīng)的標(biāo)記處理程序片:  
  14.  
  15. →對于if標(biāo)記,執(zhí)行類如下:  
  16.  
  17. publicclassIfTagextendsTagSupport{  
  18.  
  19. privatebooleancondition&#59;  
  20.  
  21. privateBooleanhasCondition=flase&#59;  
  22.  
  23. publicvoidsetCondition(Booleancondition){//設(shè)置判斷條件的真假;condition子標(biāo)  
  24.  
  25. //記調(diào)用  
  26.  
  27. this.condition=condition&#59;  
  28.  
  29. hasCondition=true&#59;  
  30.  
  31. }  
  32.  
  33. publicBooleangetCondition(){//獲取判斷條件的真假then、else子標(biāo)  
  34.  
  35. //記調(diào)用  
  36.  
  37. return(condition)&#59;  
  38.  
  39. }  
  40.  
  41. publicvoidsetHasCondition(Booleanflag){//判斷if標(biāo)記后是否存在條件,由  
  42.  
  43. //condition子標(biāo)記調(diào)用  
  44.  
  45. this.hasCondition=flag&#59;  
  46.  
  47. }  
  48.  
  49. publicBooleangetHasCondition(){//獲取是否存在判斷條件的信息,由  
  50.  
  51. //then、else標(biāo)記調(diào)用  
  52.  
  53. return(hasCondition)&#59;  
  54.  
  55. }  
  56.  
  57. publicintdoStartTag(){  
  58.  
  59. return(EVAL_BODY_INCLUDE)//包含子標(biāo)記  
  60.  
  61. }  
  62.  
  63. }  
  64.  

→那么對于condition等其它子標(biāo)記的處理程序,需要獲取父標(biāo)記處理程序?qū)ο螅?/P>

IfTagparent=(IfTag)findAncestorWithClass(this,IfTag.class)

之后就可以操作父標(biāo)記處理程序的相應(yīng)方法。

示例:(對于condition標(biāo)記)

  1. publicclassIfConditionTagextendsBodyTagSupport{  
  2.  
  3. ifTagparent=(IfTag)findAncestorWithClass(this,IfTag.class)&#59;//獲取父標(biāo)記對應(yīng)的對象  
  4.  
  5. If(parent==null){  
  6.  
  7. ThrownewJspTagException(“conditionnotinsideit”)&#59;  
  8.  
  9. }  
  10.  
  11. return(EVAL_BODY_TAG)&#59;  
  12.  
  13. }  
  14.  
  15.  
  16.  
  17. publicintdoAfterBody(){  
  18.  
  19. ifTagparent=(IfTag)findAncestorWithClass(this,IfTag.class)&#59;  
  20.  
  21. StringbodyString=getBodyContent().getString()&#59;  
  22.  
  23. If(bodyString.trim().equals(“true”)){  
  24.  
  25. Parent.setCondition(true)//訪問父標(biāo)記處理類中的方法  
  26.  
  27. }else{  
  28.  
  29. parent.setCondition(false)&#59;  
  30.  
  31. }  
  32.  
  33. return(SKIP_BODY)&#59;  
  34.  
  35. }  
  36.  
  37. }  
  38.  

其余標(biāo)記類和此相似。

4.小結(jié)

對于一些不太復(fù)雜和功能單一的邏輯描述,需要傳遞的參數(shù)要求不高時(shí),使用JSP標(biāo)記,要方便的多。對于大多數(shù)的商業(yè)邏輯應(yīng)用,還是使用bean要好的多,也宜于servlet控制。

這個(gè)東東是俺學(xué)習(xí)人郵出的Servletlet與JSP核心技術(shù)》時(shí)隨手寫下的。里面的程序還沒具體配置過。過段時(shí)間弄了再搞篇實(shí)驗(yàn)體會(huì)吧。

以上就是JSP標(biāo)記學(xué)習(xí)筆記,希望對于初學(xué)者有所幫助,對你的開發(fā)有一定的引導(dǎo)。

【編輯推薦】

  1. 基于JSP實(shí)現(xiàn)數(shù)據(jù)庫中圖片的存儲(chǔ)與顯示
  2. JSP入門之避免Form表單重復(fù)提交的幾種方案
  3. JSP入門需要知道的五個(gè)方面
  4. JSP導(dǎo)出Oracle數(shù)據(jù)表的操作淺談
  5. 在JSP中實(shí)現(xiàn)頁面跳轉(zhuǎn)
責(zé)任編輯:仲衡 來源: chinaunix
相關(guān)推薦

2009-07-03 09:08:23

JSP標(biāo)記學(xué)習(xí)筆記

2009-07-06 13:52:56

編寫JSP Tag

2009-06-29 17:39:31

JSP設(shè)計(jì)模式

2009-08-11 14:05:28

JSP驗(yàn)證碼

2010-08-10 16:41:54

FlexJSP

2010-09-07 10:33:04

CSS

2009-07-02 11:34:42

JSP指令JSP開發(fā)

2009-07-14 10:47:47

MyEclipse J

2009-07-06 14:05:11

JSP服務(wù)器

2009-08-03 09:15:39

JSP標(biāo)準(zhǔn)標(biāo)記庫JSTL

2009-07-03 17:48:34

JSP頁面翻譯

2009-07-01 18:20:29

JSP的優(yōu)勢

2009-07-07 14:33:44

JSP入門

2009-07-02 10:51:21

腳本編程JSP開發(fā)

2009-07-06 12:49:33

JSP編譯器

2009-06-16 15:20:48

ApplicationJSP程序

2009-07-06 17:11:38

Servlet文件上傳

2009-03-17 16:18:51

JspActionStruts

2009-07-03 14:41:03

2009-07-14 15:42:38

MyEclipse開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)