欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JSP自定義標(biāo)簽入門學(xué)習(xí)

 更新時(shí)間:2015年12月15日 10:44:19   作者:Wpeace  
這篇文章主要介紹了JSP自定義標(biāo)簽入門學(xué)習(xí),文章主要講解:自定義標(biāo)簽庫;404頁面,505頁面,錯(cuò)誤頁面配置方法,感興趣的小伙伴們可以參考一下

本文為大家分享了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)化為對被 稱為tag handler的對象的操作,即當(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è)最簡單的自定義標(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);
 List<String> 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)簽

<%-- 測試簡單的自定義標(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文件?。?!
步驟如下:

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

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方法;

格式如下:

<!-- 測試帶屬性的標(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)簽,對就是獲得父標(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)簽稍微有些不同,需要嵌套

<!-- 測試choose -->
<rlovep:choose>
<rlovep:When test="${10<5 }">
 條件成立執(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入門就介紹到這里,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評論