亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP自定義標簽入門學習

2024-09-05 00:22:26
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了JSP自定義標簽入門學習,文章主要講解:自定義標簽庫;404頁面,505頁面,錯誤頁面配置方法,感興趣的小伙伴們可以參考一下
 

本文為大家分享了JSP自定義標簽入門學習教程,希望大家喜歡。

1.JSP自定義標簽:

自定義標簽是用戶定義的JSP語言元素。當JSP頁面包含一個自定義標簽時將被轉化為servlet,標簽轉化為對被 稱為tag handler的對象的操作,即當servlet執行時Web container調用那些操作。JSP標簽擴展可以讓你創建新的標簽并且可以直接插入到一個JSP頁面。 JSP 2.0規范中引入Simple Tag Handlers來編寫這些自定義標記。你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發一個最簡單的自定義標簽。

2.開發自定義標簽

下面的步驟建立一個自定義標簽用于戰術客戶端的ip地址:

編寫一個普通的java類,繼承SimpleTagSupport類,

public class ShowIp extends SimpleTagSupport {/** * 以下屏蔽的代碼在SimpleTagSupport代碼中已經做了!這里不需要重復再做! *//*private JspContext context;*//** * 傳入pageContext *//*@Overridepublic void setJspContext(JspContext pc) { this.context = pc;}*/@Overridepublic void doTag() throws JspException, IOException { PageContext pageContext=(PageContext)this.getJspContext(); ServletRequest request = pageContext.getRequest(); String ip=request.getRemoteHost(); JspWriter out = pageContext.getOut(); out.write("使用自定義標簽展示客戶ip地址"+ip); List<String> a=null;}}

在web項目的WEB-INF目錄下建立mytaglib.tld文件,這個tld叫標簽庫的聲明文件。(參考核心標簽庫的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"><description>A tag library exercising SimpleTag handlers.</description><!-- 標簽庫的版本 --><tlib-version>1.0</tlib-version><!-- 標簽庫前綴 --><short-name>rlovep</short-name> <!-- tld文件的唯一標記 --> <uri>http://rlovep.com</uri> <!-- 定義標簽,標簽要放在方法前面 --> <tag> <!-- 標簽名 --> <name>showIp</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.ShowIp</tag-class> <body-content>empty</body-content> </tag> <tag></taglib>

在jsp頁面的頭部導入自定義標簽庫:url為你在tld中寫的url,前綴也是你在tld文件中定義的

<%@ taglib uri="http://rlovep.com" prefix="rlovep" %>

在jsp中使用自定義標簽

<%-- 測試簡單的自定義標簽,標簽體(我是你)不顯示 --%><rlovep:showIp>我是你</rlovep:showIp>

3.自定義標簽的執行過程

當訪問:http://localhost:8080/stuJsp/Hellotags.jsp 時;要重啟Tomcat使服務器啟動時,加載每個web應用的WEB-INF目錄下的所有文件?。?!例如。web.xml, tld文件?。?!
步驟如下:

  • 檢查jsp文件的taglib指令,是否存在一個url為http://rlovep.com的tld文件。如果沒有,則報錯。
  • 執行jsp文件的轉化:把jsp文件翻譯成java源文件->編譯class->構造類對象->調用_jspService()方法
  • 讀到到mytaglib.tld文件中查詢是否存在為showIp的標簽
  • 找到對應的標簽,則讀到內容,得到com.rlovep.tags.ShowIp
  • 構造ShowIp對象,然后調用ShowIp里面的方法:dotag方法;

4.訪問標簽體

你可以像標準標簽庫一樣在標簽中包含消息內容。如我們要在我們自定義的中包含內容

格式如下:

<rlovep:showIp>我是你</rlovep:showIp>

但要文字顯示需要修改處理類和tld文件:
修改處理類在doTag方法中增加如下內容:

JspContext jspContext2 = this.getJspContext();//顯示標簽體的兩種方法//方法1直接調用//jspBody.invoke(null);//方法2通過輸出到out//jspBody.invoke(jspContext2.getOut());

修改tld文件:

 <tag> <!-- 標簽名 --> <name>showIp</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.ShowIp</tag-class> <!-- 輸出標簽體的內容格式標簽體不可以寫jsp的java代碼 --> <body-content>scriptless</body-content> </tag>

現在你可以將標簽體的內容顯示了;

<%-- 標簽提會顯示 --%><rlovep:showIp>我是你</rlovep:showIp>

輸出標簽體的內容格式:
JSP: 在傳統標簽中使用的??梢詫懞蛨绦衘sp的java代碼。
scriptless: 標簽體不可以寫jsp的java代碼
empty: 必須是空標簽。
tagdependent : 標簽體內容可以寫jsp的java代碼,但不會執

5.給標簽體帶屬性:

你可以在自定義標準中設置各種屬性,要接收屬性,值自定義標簽類必須實現setter方法;

格式如下:

<!-- 測試帶屬性的標簽,標簽體顯示通過類處理 --><rlovep:AttributeTags name="peace" value="12345

定義屬性步驟如下:
編寫處理類:AttributeTags extends SimpleTagSupport

添加倆個屬性://聲明屬性的成員變量private Integer value;private String name;并為兩個成員屬性寫setter方法;public void setValue(Integer value)public void setName(String name) 

在標簽庫文件tld注明此標簽和屬性:

<!-- 標簽名 --> <name>AttributeTags</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.AttributeTags</tag-class> <!-- 輸出標簽體的內容格式標簽體不可以寫jsp的java代碼 --> <body-content>scriptless</body-content> <!-- 配置屬性name --> <attribute> <name>name</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表達式 --> <rtexprvalue>true</rtexprvalue> </attribute> <!-- 配置屬性value --> <attribute> <name>value</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表達式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag>

現在就可以用帶屬性的標簽了
在tld配置屬性時你可以配置下面的屬性:

JSP自定義標簽入門學習

6.帶有子標簽的自定義標簽:

就像核心標簽庫的choose標簽一樣我們也可以定義嵌套的自定義標簽,這部分我們主要講解自己創建一個類似核心標簽庫的choose標簽。步驟如下:

建立處理類,處理類還是與前面一樣的方法。需要介紹的是用到了一個getParent()方法,從名字上就可以知道是為了獲得父標簽,對就是獲得父標簽類;
建立三個處理類文件: ChooseTag,OtherWiseTag,whenTag

//ChooseTag類:public class ChooseTag extends SimpleTagSupport{//此去時變量不是標簽屬性,由when標簽更改;othewise獲得;private boolean flag; public boolean isFlag() { return flag;}public void setFlag(boolean flag) { this.flag = flag;}@Overridepublic void doTag() throws JspException, IOException { // Choose標簽作用顯示標簽體,以及作為其他兩個標簽的父標簽; getJspBody().invoke(null);}}//whenTag類public class whenTag extends SimpleTagSupport{//增加test屬性private boolean test;public boolean isTest() { return test;}public void setTest(boolean test) { this.test = test;}@Overridepublic void doTag() throws JspException, IOException { //如果標簽屬性為true,顯示標簽體 if(test){  getJspBody().invoke(null); } //設置父標簽給otherwise用 ChooseTag parent=null; if(getParent() instanceof ChooseTag){  parent=(ChooseTag)getParent();  parent.setFlag(test); }}}//OtherWiseTag類:public class OtherWiseTag extends SimpleTagSupport {@Overridepublic void doTag() throws JspException, IOException { boolean test=true; //獲取父標簽的test,由他的上一個when設置 if(getParent() instanceof ChooseTag) {  //獲取父標簽的test,由他的上一個when設置  ChooseTag parent=(ChooseTag)getParent();  test=parent.isFlag(); } if(!test){  getJspBody().invoke(null); }}}

編寫tld文件:與其他的標簽定義一模一樣

<!-- 定義標簽,choose--> <tag> <!-- 標簽名 --> <name>choose</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.ChooseTag</tag-class> <!-- 輸出標簽體的內容格式標簽體不可以寫jsp的java代碼 --> <body-content>scriptless</body-content> </tag> <!-- 定義標簽,when--><tag> <!-- 標簽名 when --> <name>When</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.whenTag</tag-class> <!-- 輸出標簽體的內容格式標簽體不可以寫jsp的java代碼 --> <body-content>scriptless</body-content> <!-- 配置屬性name --> <attribute> <name>test</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表達式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <!-- 定義標簽,Otherwise--> <tag> <!-- 標簽名 --> <name>otherwise</name> <!-- 標簽處理類 --> <tag-class>com.rlovep.tags.OtherWiseTag</tag-class> <!-- 輸出標簽體的內容格式標簽體不可以寫jsp的java代碼 --> <body-content>scriptless</body-content> </tag>

使用帶子標簽的標簽:與使用其他標簽稍微有些不同,需要嵌套

<!-- 測試choose --><rlovep:choose><rlovep:When test="${10<5 }"> 條件成立執行when</rlovep:When><rlovep:otherwise> 條件不成立執行otherwise</rlovep:otherwise></rlovep:choose>

自定義標簽就介紹到這里;

404頁面,505頁面,錯誤頁面配置方法:

可以在web.xml中給你的網站配置全局的404頁面,505頁面,錯誤頁面;配置方法如下:記得建立相應的跳轉文件。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><!-- 配置空指針異常 --> <error-page>  <exception-type>java.lang.NullPointerException</exception-type>  <location>/error.jsp</location> </error-page> <!-- 配置505錯誤頁面 --> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> </error-page> <!-- 配置404錯誤頁面 --> <error-page> <error-code>404</error-code> <location>/common/404.html</location> </error-page></web-app>

JSP入門就介紹到這里,希望對大家的學習有所幫助。



注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线播放视频| 九九久久久久久久久激情| 日韩av在线一区| 日本一区二区在线免费播放| 北条麻妃一区二区在线观看| 亚洲理论在线a中文字幕| 国产精品久久久久7777婷婷| 精品国产一区二区三区在线观看| 国内免费精品永久在线视频| 成人午夜两性视频| 国产精品精品一区二区三区午夜版| 日韩欧美在线免费观看| 日本精品免费观看| 九九久久久久久久久激情| 色综合久久久888| 97在线观看视频国产| 欧美激情日韩图片| 俺去了亚洲欧美日韩| 91精品免费视频| 国模精品视频一区二区| 奇米一区二区三区四区久久| 国产成人精品在线观看| 久久久欧美精品| 国产精品白嫩初高中害羞小美女| 亚洲人精选亚洲人成在线| 亚洲精品美女在线| 久久精品电影一区二区| 91精品国产色综合久久不卡98| 欧美日韩在线观看视频小说| 久久久女人电视剧免费播放下载| 91精品国产91久久久久久不卡| 国产91精品在线播放| 另类少妇人与禽zozz0性伦| 中文字幕九色91在线| 国产成人高潮免费观看精品| 国产午夜精品视频免费不卡69堂| 亚洲图片在线综合| 欧美精品videos| 91久久精品日日躁夜夜躁国产| 亚洲电影免费观看高清完整版在线观看| 亚洲黄色av女优在线观看| 国产精品99久久久久久久久| 国产精品久久久久久久久久久久| 欧美床上激情在线观看| 在线日韩精品视频| 中文字幕欧美日韩精品| 色综合天天狠天天透天天伊人| 久久亚洲电影天堂| 国产精品在线看| 精品国产乱码久久久久酒店| 欧美极品美女电影一区| 国产成人福利夜色影视| 清纯唯美亚洲综合| 九九精品视频在线| 5566成人精品视频免费| 国产精品爱久久久久久久| 久久大大胆人体| 国产精品福利在线观看网址| 欧美国产日韩精品| 午夜精品久久久久久久男人的天堂| 亚洲欧洲自拍偷拍| 午夜精品久久久久久久久久久久| 国产精品丝袜高跟| 萌白酱国产一区二区| 国产在线拍偷自揄拍精品| 色综合导航网站| 98午夜经典影视| 91产国在线观看动作片喷水| 精品久久久在线观看| 亚洲欧美日韩另类| 亚洲自拍偷拍福利| 国产一区二区三区免费视频| 57pao国产精品一区| 欧美在线亚洲一区| 国产婷婷成人久久av免费高清| 久久天天躁狠狠躁夜夜躁| 91精品视频网站| 日本久久精品视频| 亚洲欧美制服丝袜| 97视频在线观看播放| 欧美成人免费播放| 精品五月天久久| 国产午夜精品一区理论片飘花| 九九热99久久久国产盗摄| 国产女精品视频网站免费| 欧美日韩亚洲一区二| 久久亚洲精品毛片| 国产区精品视频| 亚洲一二三在线| 91亚洲精品视频| 亚洲色图35p| 欧美高清视频在线播放| 日本伊人精品一区二区三区介绍| 午夜欧美不卡精品aaaaa| 成人在线精品视频| 91探花福利精品国产自产在线| 久久久久久久999| 欧美福利小视频| 亚洲黄色在线看| 国产精品第8页| 国产91精品视频在线观看| 欧美精品久久久久久久免费观看| 日韩精品中文字幕在线播放| 亚洲国产精品悠悠久久琪琪| 国产精品夜间视频香蕉| 欧洲美女免费图片一区| 国产精品视频永久免费播放| 国产精品精品久久久久久| 国产成人精品国内自产拍免费看| 欧美性受xxxx白人性爽| 欧美日韩精品在线观看| 激情成人中文字幕| 国产精品亚洲美女av网站| 日本久久久久久久久久久| 亚洲精品视频免费在线观看| 欧美成人四级hd版| 26uuu久久噜噜噜噜| 欧美激情免费观看| 性欧美暴力猛交69hd| 欧美国产日韩一区二区在线观看| 日韩高清电影免费观看完整| 亚洲国产一区二区三区四区| 欧美日韩精品在线观看| 欧美黑人一级爽快片淫片高清| 国产一区二区香蕉| 日韩欧美在线播放| 一区二区三区视频免费在线观看| 97视频在线观看成人| 久久久国产影院| 在线观看视频亚洲| 日韩在线视频一区| 欧美精品在线免费观看| 亚洲乱码国产乱码精品精| 亚洲精品国产精品国产自| 日韩一区二区av| 91视频九色网站| 欧美电影在线观看完整版| 久久综合五月天| 精品日韩中文字幕| 日韩欧美亚洲国产一区| 亚洲电影免费观看高清完整版在线观看| 欧美整片在线观看| 九九热这里只有精品免费看| 国产亚洲成av人片在线观看桃| 欧美大胆a视频| 精品国产91久久久| 国产精品影院在线观看| 国产噜噜噜噜久久久久久久久| 在线视频欧美日韩精品| 日韩在线视频网| 亚洲字幕在线观看| 成人网在线观看| 91亚洲国产成人精品性色| 中文字幕在线成人| 精品国产网站地址| 在线丨暗呦小u女国产精品| 亚洲欧美国产精品久久久久久久| 久久精品国产91精品亚洲| 欧美激情乱人伦一区| 亚洲最大激情中文字幕| 北条麻妃一区二区在线观看| 亚洲黄页网在线观看| 久久久噜噜噜久久久| 92裸体在线视频网站|