本文為大家分享了JSP自定義標(biāo)簽入門學(xué)習(xí)教程,希望大家喜歡。
1.JSP自定義標(biāo)簽:
自定義標(biāo)簽是用戶定義的JSP語言元素。當(dāng)JSP頁面包含一個(gè)自定義標(biāo)簽時(shí)將被轉(zhuǎn)化為servlet,標(biāo)簽轉(zhuǎn)化為對(duì)被 稱為tag handler的對(duì)象的操作,即當(dāng)servlet執(zhí)行時(shí)Web container調(diào)用那些操作。JSP標(biāo)簽擴(kuò)展可以讓你創(chuàng)建新的標(biāo)簽并且可以直接插入到一個(gè)JSP頁面。 JSP 2.0規(guī)范中引入Simple Tag Handlers來編寫這些自定義標(biāo)記。你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發(fā)一個(gè)最簡(jiǎn)單的自定義標(biāo)簽。
2.開發(fā)自定義標(biāo)簽
下面的步驟建立一個(gè)自定義標(biāo)簽用于戰(zhàn)術(shù)客戶端的ip地址:
編寫一個(gè)普通的java類,繼承SimpleTagSupport類,
public class ShowIp extends SimpleTagSupport { /** * 以下屏蔽的代碼在SimpleTagSupport代碼中已經(jīng)做了!這里不需要重復(fù)再做! */ /*private JspContext context; *//** * 傳入pageContext *//* @Override public void setJspContext(JspContext pc) { this.context = pc; }*/ @Override public void doTag() throws JspException, IOException { PageContext pageContext=(PageContext)this.getJspContext(); ServletRequest request = pageContext.getRequest(); String ip=request.getRemoteHost(); JspWriter out = pageContext.getOut(); out.write("使用自定義標(biāo)簽展示客戶ip地址"+ip); ListString> a=null; } }
在web項(xiàng)目的WEB-INF目錄下建立mytaglib.tld文件,這個(gè)tld叫標(biāo)簽庫的聲明文件。(參考核心標(biāo)簽庫的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> !-- 標(biāo)簽庫的版本 --> tlib-version>1.0/tlib-version> !-- 標(biāo)簽庫前綴 --> short-name>rlovep/short-name> !-- tld文件的唯一標(biāo)記 --> uri>http://rlovep.com/uri> !-- 定義標(biāo)簽,標(biāo)簽要放在方法前面 --> tag> !-- 標(biāo)簽名 --> name>showIp/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.ShowIp/tag-class> body-content>empty/body-content> /tag> tag> /taglib>
在jsp頁面的頭部導(dǎo)入自定義標(biāo)簽庫:url為你在tld中寫的url,前綴也是你在tld文件中定義的
%@ taglib uri="http://rlovep.com" prefix="rlovep" %>
在jsp中使用自定義標(biāo)簽
%-- 測(cè)試簡(jiǎn)單的自定義標(biāo)簽,標(biāo)簽體(我是你)不顯示 --%> rlovep:showIp>我是你 /rlovep:showIp>
3.自定義標(biāo)簽的執(zhí)行過程
當(dāng)訪問:http://localhost:8080/stuJsp/Hellotags.jsp 時(shí);要重啟Tomcat使服務(wù)器啟動(dòng)時(shí),加載每個(gè)web應(yīng)用的WEB-INF目錄下的所有文件?。?!例如。web.xml, tld文件?。?!
步驟如下:
4.訪問標(biāo)簽體
你可以像標(biāo)準(zhǔn)標(biāo)簽庫一樣在標(biāo)簽中包含消息內(nèi)容。如我們要在我們自定義的中包含內(nèi)容
格式如下:
rlovep:showIp>我是你 /rlovep:showIp>
但要文字顯示需要修改處理類和tld文件:
修改處理類在doTag方法中增加如下內(nèi)容:
JspContext jspContext2 = this.getJspContext(); //顯示標(biāo)簽體的兩種方法 //方法1直接調(diào)用 //jspBody.invoke(null); //方法2通過輸出到out //jspBody.invoke(jspContext2.getOut());
修改tld文件:
tag> !-- 標(biāo)簽名 --> name>showIp/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.ShowIp/tag-class> !-- 輸出標(biāo)簽體的內(nèi)容格式標(biāo)簽體不可以寫jsp的java代碼 --> body-content>scriptless/body-content> /tag>
現(xiàn)在你可以將標(biāo)簽體的內(nèi)容顯示了;
%-- 標(biāo)簽提會(huì)顯示 --%> rlovep:showIp>我是你 /rlovep:showIp>
輸出標(biāo)簽體的內(nèi)容格式:
JSP: 在傳統(tǒng)標(biāo)簽中使用的。可以寫和執(zhí)行jsp的java代碼。
scriptless: 標(biāo)簽體不可以寫jsp的java代碼
empty: 必須是空標(biāo)簽。
tagdependent : 標(biāo)簽體內(nèi)容可以寫jsp的java代碼,但不會(huì)執(zhí)
5.給標(biāo)簽體帶屬性:
你可以在自定義標(biāo)準(zhǔn)中設(shè)置各種屬性,要接收屬性,值自定義標(biāo)簽類必須實(shí)現(xiàn)setter方法;
格式如下:
!-- 測(cè)試帶屬性的標(biāo)簽,標(biāo)簽體顯示通過類處理 --> rlovep:AttributeTags name="peace" value="12345
定義屬性步驟如下:
編寫處理類:AttributeTags extends SimpleTagSupport
添加倆個(gè)屬性: //聲明屬性的成員變量 private Integer value; private String name; 并為兩個(gè)成員屬性寫setter方法; public void setValue(Integer value) public void setName(String name)
在標(biāo)簽庫文件tld注明此標(biāo)簽和屬性:
!-- 標(biāo)簽名 --> name>AttributeTags/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.AttributeTags/tag-class> !-- 輸出標(biāo)簽體的內(nèi)容格式標(biāo)簽體不可以寫jsp的java代碼 --> body-content>scriptless/body-content> !-- 配置屬性name --> attribute> name>name/name> !-- 是否必填 --> required>true/required> !-- 是否支持EL表達(dá)式 --> rtexprvalue>true/rtexprvalue> /attribute> !-- 配置屬性value --> attribute> name>value/name> !-- 是否必填 --> required>true/required> !-- 是否支持EL表達(dá)式 --> rtexprvalue>true/rtexprvalue> /attribute> /tag>
現(xiàn)在就可以用帶屬性的標(biāo)簽了
在tld配置屬性時(shí)你可以配置下面的屬性:
6.帶有子標(biāo)簽的自定義標(biāo)簽:
就像核心標(biāo)簽庫的choose標(biāo)簽一樣我們也可以定義嵌套的自定義標(biāo)簽,這部分我們主要講解自己創(chuàng)建一個(gè)類似核心標(biāo)簽庫的choose標(biāo)簽。步驟如下:
建立處理類,處理類還是與前面一樣的方法。需要介紹的是用到了一個(gè)getParent()方法,從名字上就可以知道是為了獲得父標(biāo)簽,對(duì)就是獲得父標(biāo)簽類;
建立三個(gè)處理類文件: ChooseTag,OtherWiseTag,whenTag
//ChooseTag類: public class ChooseTag extends SimpleTagSupport{ //此去時(shí)變量不是標(biāo)簽屬性,由when標(biāo)簽更改;othewise獲得; private boolean flag; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void doTag() throws JspException, IOException { // Choose標(biāo)簽作用顯示標(biāo)簽體,以及作為其他兩個(gè)標(biāo)簽的父標(biāo)簽; 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; } @Override public void doTag() throws JspException, IOException { //如果標(biāo)簽屬性為true,顯示標(biāo)簽體 if(test){ getJspBody().invoke(null); } //設(shè)置父標(biāo)簽給otherwise用 ChooseTag parent=null; if(getParent() instanceof ChooseTag){ parent=(ChooseTag)getParent(); parent.setFlag(test); } } } //OtherWiseTag類: public class OtherWiseTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { boolean test=true; //獲取父標(biāo)簽的test,由他的上一個(gè)when設(shè)置 if(getParent() instanceof ChooseTag) { //獲取父標(biāo)簽的test,由他的上一個(gè)when設(shè)置 ChooseTag parent=(ChooseTag)getParent(); test=parent.isFlag(); } if(!test){ getJspBody().invoke(null); } } }
編寫tld文件:與其他的標(biāo)簽定義一模一樣
!-- 定義標(biāo)簽,choose--> tag> !-- 標(biāo)簽名 --> name>choose/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.ChooseTag/tag-class> !-- 輸出標(biāo)簽體的內(nèi)容格式標(biāo)簽體不可以寫jsp的java代碼 --> body-content>scriptless/body-content> /tag> !-- 定義標(biāo)簽,when--> tag> !-- 標(biāo)簽名 when --> name>When/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.whenTag/tag-class> !-- 輸出標(biāo)簽體的內(nèi)容格式標(biāo)簽體不可以寫jsp的java代碼 --> body-content>scriptless/body-content> !-- 配置屬性name --> attribute> name>test/name> !-- 是否必填 --> required>true/required> !-- 是否支持EL表達(dá)式 --> rtexprvalue>true/rtexprvalue> /attribute> /tag> !-- 定義標(biāo)簽,Otherwise--> tag> !-- 標(biāo)簽名 --> name>otherwise/name> !-- 標(biāo)簽處理類 --> tag-class>com.rlovep.tags.OtherWiseTag/tag-class> !-- 輸出標(biāo)簽體的內(nèi)容格式標(biāo)簽體不可以寫jsp的java代碼 --> body-content>scriptless/body-content> /tag>
使用帶子標(biāo)簽的標(biāo)簽:與使用其他標(biāo)簽稍微有些不同,需要嵌套
!-- 測(cè)試choose --> rlovep:choose> rlovep:When test="${105 }"> 條件成立執(zhí)行when /rlovep:When> rlovep:otherwise> 條件不成立執(zhí)行otherwise /rlovep:otherwise> /rlovep:choose>
自定義標(biāo)簽就介紹到這里;
404頁面,505頁面,錯(cuò)誤頁面配置方法:
可以在web.xml中給你的網(wǎng)站配置全局的404頁面,505頁面,錯(cuò)誤頁面;配置方法如下:記得建立相應(yīng)的跳轉(zhuǎn)文件。
?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錯(cuò)誤頁面 --> error-page> error-code>500/error-code> location>/common/500.jsp/location> /error-page> !-- 配置404錯(cuò)誤頁面 --> error-page> error-code>404/error-code> location>/common/404.html/location> /error-page> /web-app>
JSP入門就介紹到這里,希望對(duì)大家的學(xué)習(xí)有所幫助。
標(biāo)簽:吉林 白銀 烏蘭察布 銅川 自貢 山南 開封 臨汾
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP自定義標(biāo)簽入門學(xué)習(xí)》,本文關(guān)鍵詞 JSP,自定義,標(biāo)簽,入門,學(xué)習(xí),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。