亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JSP自定義標簽開發入門(1)

系統 1748 0

JSP自定義標簽開發入門(1)


JSP自定義標簽開發入門,簡單標簽的開發我們只要實現Tag接口即可,為了簡單起見可以直接繼承實現了此接口的TagSupport類。

AD

?

一般情況下開發jsp自定義標簽需要引用以下兩個包

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

首先我們需要大致了解開發自定義標簽所涉及到的接口與類的層次結構(其中SimpleTag接口與SimpleTagSupport類是JSP2.0中新引入的)。

?

JSP自定義標簽開發入門(1)

?

目標1:自定義一個用表格顯示用戶信息的簡單標簽

效果圖:

?

?

在jsp頁面使用此自定義標簽:

假設我們有一個UserInfo的javabean,那么在JSP頁面使用此標簽只需調用此標簽即可

        
  1. <!--?創建需要展現UserInfo的實例(用于測試數據)?--> ?
  2. ???? < % ?
  3. ????UserInfo? user ?=? new ?UserInfo(); ?
  4. ????user.setUserName("Xuwei"); ?
  5. ????user.setAge(33); ?
  6. ????user.setEmail("test@test.test"); ?
  7. ????pageContext.setAttribute("userinfo",?user);?? ?
  8. ????% > ?
  9. ? ?
  10. ???? <!--?給標簽設置user屬性綁定要展現的UserInfo對象??--> ?
  11. ???? < cc:showUserInfo ? user = "${pageScope.userinfo?}" ? /> ?

開發步驟:

簡單標簽的開發我們只要實現Tag接口即可,為了簡單起見可以直接繼承實現了此接口的TagSupport類

1 創建自定義標簽類

        
  1. public?class?UserInfoTag?extends?TagSupport?{ ?
  2. ??? ?
  3. ????private?UserInfo?user; ?
  4. ? ?
  5. ????@Override ?
  6. ????public?int?doStartTag()?throws?JspException?{ ?
  7. ????????try?{ ?
  8. ????????????JspWriter? out ?=? this .pageContext.getOut(); ?
  9. ????????????if( user ?==?null)?{ ?
  10. ????????????????out.println("No?UserInfo?Found..."); ?
  11. ????????????????return?SKIP_BODY; ?
  12. ????????????} ?
  13. ????????????out.println(" < table ? width = '500px' ? border = '1' ? align = 'center' > "); ?
  14. ????????????out.println(" < tr > "); ?
  15. ????????????out.println(" < td ? width = '20%' > Username: </ td > "); ?
  16. ????????????out.println(" < td > "?+?user.getUserName()?+?" </ td > "); ?
  17. ????????????out.println(" </ tr > "); ?
  18. ????????????out.println(" < tr > "); ?
  19. ????????????out.println(" < td > Age: </ td > "); ?
  20. ????????????out.println(" < td > "?+?user.getAge()?+?" </ td > "); ?
  21. ????????????out.println(" </ tr > "); ?
  22. ????????????out.println(" < tr > "); ?
  23. ????????????out.println(" < td > Email: </ td > "); ?
  24. ????????????out.println(" < td > "?+?user.getEmail()?+?" </ td > "); ?
  25. ????????????out.println(" </ tr > "); ?
  26. ????????????out.println(" </ table > "); ?
  27. ????????}?catch(Exception?e)?{ ?
  28. ????????????throw?new?JspException(e.getMessage()); ?
  29. ????????} ?
  30. ????????return?SKIP_BODY; ?
  31. ????} ?
  32. ??? ?
  33. ????@Override ?
  34. ????public?int?doEndTag()?throws?JspException?{ ?
  35. ????????return?EVAL_PAGE; ?
  36. ????} ?
  37. ? ?
  38. ????@Override ?
  39. ????public?void?release()?{ ?
  40. ????????super.release(); ?
  41. ???????? this.user ?=? null ; ?
  42. ????} ?
  43. ??? ?
  44. ????//getter?and?setters ?
  45. ????public?UserInfo?getUser()?{ ?
  46. ????????return?user; ?
  47. ????} ?
  48. ????public?void?setUser(UserInfo?user)?{ ?
  49. ???????? this.user ?=?user; ?
  50. ????} ?
  51. } ?
  52. ??

2 在Web-Inf創建標簽庫描述文件.tdl(Tag Library Description)

        
  1. <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ?
  2. < taglib ? version = "2.0" ? xmlns = "http://java.sun.com/xml/ns/j2ee" ?
  3. ? xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" ?
  4. ? xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee?web-jsptaglibrary_2_0.xsd" > ?
  5. < tlib-version > 1.0 </ tlib-version > ?
  6. < jsp-version > 2.0 </ jsp-version > ?
  7. < short-name > cc </ short-name > ?
  8. < uri > /mytaglib </ uri > ?
  9. < tag > ?
  10. ???? < name > showUserInfo </ name > ?
  11. ???? < tag-class > com.mytags.UserInfoTag </ tag-class > ?
  12. ???? < body-content > empty </ body-content > ?
  13. ???? < attribute > ?
  14. ???????? < name > user </ name > ?
  15. ????????? < required > false </ required > ?
  16. ????????? < rtexprvalue > true </ rtexprvalue > ?
  17. ???? </ attribute > ?
  18. ? </ tag > ?
  19. </ taglib > ?

3 配置web.xml

        
  1. < jsp-config > ?
  2. ???? < taglib > ?
  3. ???????? < taglib-uri > /mytaglib </ taglib-uri > ?
  4. ???????? < taglib-location > /WEB-INF/mytaglib.tld </ taglib-location > ?
  5. ???? </ taglib > ?
  6. ?? </ jsp-config > ?

4 在需要使用此標簽的jsp頁面頭部引入

        
  1. < %@?taglib? uri = "/mytaglib" ? prefix = "cc" % > ?

5 使用(參照上面的使用步驟)

此致,一個簡單的JSP標簽開發完成

標簽類說明:

?

JSP自定義標簽開發入門(1)

?

我們創建的UserInfoTag類繼承了TagSupport類,而它又實現了Tag接口,Tag接口的生命周期由其所在的容器控制,如下圖:

setPageContext() 將所在jsp頁面的pageContext注入進來,目的是為了在后面的方法中可以訪問到jsp頁面對象的pageContext屬性

setParent() 設置此標簽的父標簽

setAttribute() 將標簽中的屬性注入到此class的屬性,不需要自己實現但要提供屬性的get與set方法

doStartTag() 在開始標簽屬性設置后調用,如果返回SKIP_BODY則忽略標簽之中的內容,如果返回EVAL_BODY_INCLUDE則將標簽體的內容進行輸出

doEndTag() 在結束標簽之前調用,返回SKIP_PAGE跳過整個jsp頁面后面的輸出,返回EVAL_PAGE執行頁面余下部分

release() 生命周期結束時調用

特別說明:在tomcat4.1之后的版本中默認開啟了標簽緩沖池(websphere和weblogic并不會這么做),所以執行完標簽后并不會執行release()方法(_jspDestroy()時才釋放),也就是說同一個jsp頁面自定義標簽不管使用多少次只會存在一個實例,但也并不是每一個標簽都會為其創建一個緩沖池,要根據參數來判斷,例如:

        
  1. < cc:UserInfoTag ? user =”…”? /> ?
  2. < cc:UserInfoTag ? /> ?

上面例子中由于參數不同就會創建兩個標簽緩沖池。

這個問題可以通過設定tomcat的配置文件加以解決:

在%tomcat%\conf\web.xml加入enablePooling參數,并設置為false(不緩存自定義標簽)。

        
  1. < init-param > ?
  2. ?? < param-name > enablePooling </ param-name > ?
  3. ?? < param-value > false </ param-value > ?
  4. </ init-param > ?

清空%tomcat%\conf\目錄


?

JSP自定義標簽開發入門(1)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩视频在线 | 在线观看年轻的母亲 | 国产精品亚洲一区二区麻豆 | 不卡不卡 | 夜夜爽天天狠狠九月婷婷 | 欧美xxxxbbbb在线播放 | 综合视频网 | 亚洲精品久久久久综合91 | 大杳蕉伊人狼人久久一本线 | 国产成人亚洲综合小说区 | 久草在线免费看 | 成年人香蕉视频 | 午夜免费福利影院 | 九九热视频免费在线观看 | 国产欧美成人免费观看视频 | 免费视频成人国产精品网站 | 91久久在线 | 伊人一伊人色综合网 | 伊人色综合久久天天网 | 91精品论坛| 久久草国产| 视频一区免费 | 日韩五月 | 伊人久久精品亚洲午夜 | 91粉色视频在线观看 | 久草首页在线 | 欧美理论片大全在线观看 | 久一视频在线 | 久久99精品久久久久久园产越南 | www.欧美com| 久久精品国内一区二区三区 | 超碰在线小说 | 91精品国产综合久久婷婷 | 日本一本久道 | 久久九九青青国产精品 | 99热这里只有精品99 | 欧美日韩中文字幕在线 | 天天欧美 | 九草在线免费观看 | 免费看爱爱视频 | 国产成人做受免费视频 |