国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Taglib 原理和實(shí)現(xiàn)之什么是Taglib JSP 關(guān)鍵詞:Taglib,原理,實(shí)現(xiàn)之什...
Taglib 原理和實(shí)現(xiàn)之什么是Taglib
此文章由教程中國(guó)(http://www.upschool.com.cn)提供 如果您覺(jué)得可以,請(qǐng)推薦給同好.本站將在近期正式對(duì)外開(kāi)放教程貼吧論壇,將設(shè)有專(zhuān)家欄,如果您有問(wèn)題,可隨時(shí)得到解決.
1、問(wèn)題:Tag究竟是什么?如何實(shí)現(xiàn)一個(gè)Tag?

  一個(gè)tag就是一個(gè)普通的java類(lèi),它唯一特別之處是它必須繼承TagSupport或者BodyTagSupport類(lèi)。這兩個(gè)類(lèi)提供了一些方法,負(fù)責(zé)jsp頁(yè)面和你編寫(xiě)的類(lèi)之間的交互,例如輸入,輸出。而這兩個(gè)類(lèi)是由jsp容器提供的,無(wú)須開(kāi)發(fā)人員自己實(shí)現(xiàn)。換句話說(shuō),你只需把實(shí)現(xiàn)了業(yè)務(wù)邏輯的類(lèi)繼承TagSupport或者BodyTagSupport,再做一些特別的工作,你的類(lèi)就是一個(gè)Tag。并且它自己負(fù)責(zé)和jsp頁(yè)面的交互,不用你多操心。

  “特別的工作”通常有以下幾個(gè)步驟:

  1)提供屬性的set方法,此后這個(gè)屬性就可以在jsp頁(yè)面設(shè)置。以jstl標(biāo)簽為例 <c:out value=""/>,這個(gè)value就是jsp數(shù)據(jù)到tag之間的入口。所以tag里面必須有一個(gè)setValue方法,具體的屬性可以不叫value。例如

setValue(String data){this.data = data;}

  這個(gè)“value”的名稱(chēng)是在tld里定義的。取什么名字都可以,只需tag里提供相應(yīng)的set方法即可。

  2)處理 doStartTag 或 doEndTag 。這兩個(gè)方法是 TagSupport提供的。 還是以<c:out value=""/>為例,當(dāng)jsp解析這個(gè)標(biāo)簽的時(shí)候,在“<”處觸發(fā) doStartTag 事件,在“>”時(shí)觸發(fā) doEndTag 事件。通常在 doStartTag 里進(jìn)行邏輯操作,在 doEndTag 里控制輸出。

  3)編寫(xiě)tld文件。

  4)在jsp頁(yè)面導(dǎo)入tld

  這樣,你的jsp頁(yè)面就可以使用自己的tag了。

  通常你會(huì)發(fā)現(xiàn)自己絕大多數(shù)活動(dòng)都集中在 doStartTag 或 doEndTag 方法里。確實(shí)如此,熟悉一些接口和類(lèi)之后,寫(xiě)taglib很容易。正如《jsp設(shè)計(jì)》的作者所言:里面的邏輯稍微有點(diǎn)復(fù)雜,但畢竟沒(méi)有火箭上天那么難。

  2、一個(gè)簡(jiǎn)單的例子:OutputTag

package diegoyun;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**
* @author chenys
*/
public class OutputTag extends TagSupport
{
private String name=null;
public void setName(String name)
{
this.name = name;
}

public int doStartTag() throws JspException{
try
{
JspWriter out = pageContext.getOut();
out.print("Hello! " + name);
}
catch (Exception e)
{
throw new JspException(e);
}
return EVAL_PAGE;
}
}

  簡(jiǎn)要說(shuō)明:

  1、如何輸出到j(luò)sp頁(yè)面:

  調(diào)用JspWriter JspWriter out = pageContext.getOut();out.print......

  記住這個(gè)方法就可以了。

  2、輸出后如何作處理

  函數(shù)會(huì)返回幾個(gè)值之一。EVAL_PAGE 表示tag已處理完畢,返回jsp頁(yè)面。還有幾個(gè)值,例如 EVAL_BODY_AGAIN 和EVAL_BODY_INCLUDE等,后面我們會(huì)作討論

  編寫(xiě)tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>diego</short-name>
<!--OutputTag-->
<tag>
<name>out</name>
<tag-class>diegoyun.OutputTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>

  在WEB-INF下新建tlds文件夾,把這個(gè)文件取名為diego.tld,放到tlds文件夾下。路徑應(yīng)該這樣:WEB-INF\tlds\diego.tld
關(guān)于tld的簡(jiǎn)單說(shuō)明:

  short-name:taglib的名稱(chēng),也稱(chēng)為前綴。比如<c:out value=""/> 里的“c”

  name:tag的名字。例如<c:out value=""/> 里的"out”,我們的類(lèi)也取名為out,由于有前綴作區(qū)分,不會(huì)混淆

  tag-class:具體的tag類(lèi)。帶包名

  body-content:指tag之間的內(nèi)容。例如<c:out value=""> ...... </c> 起始和關(guān)閉標(biāo)簽之間就是body-content。由于沒(méi)有處理body-content,所以上面設(shè)為empty

  <attribute>里的name:屬性名字。例如<c:out value=""/>里的value。名字可任意取,只要類(lèi)里提供相應(yīng)的set方法即可。

  required:是否必填屬性。

  rtexprvalue:是否支持運(yùn)行時(shí)表達(dá)式取值。這是tag的強(qiáng)大功能。以后我們會(huì)討論。暫時(shí)設(shè)為false

  編寫(xiě)jsp頁(yè)面

<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/tlds/diego.tld" prefix="diego"%>
<html>
<body>
Test Tag:
<diegout name="diegoyun"/>
</body>
</html>

  我的編程環(huán)境是eclipse+tomcat.啟動(dòng)服務(wù)器,如果一切按照上面步驟的話,就能看到 Test Tag: Hello! diegoyun 字樣

  最簡(jiǎn)單的tag就這么出來(lái)了。并不難,是不是?

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
自定義JSP標(biāo)簽
[教程]自定義JSP中的Taglib標(biāo)簽之一簡(jiǎn)單入門(mén)篇(無(wú)參數(shù)的自定義標(biāo)簽)
創(chuàng)建JSP自定義標(biāo)簽
java 中的TLD文件
(轉(zhuǎn)載)TLD的屬性
自定義標(biāo)簽
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服