日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java web 自定义标签_JavaWeb学习——自定义标签

發布時間:2023/12/10 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java web 自定义标签_JavaWeb学习——自定义标签 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自定義標簽

一、自定義標簽概述

使用標準JSP訪問、操作JavaBean,是實現展現(HTML)與業務實現(Java代碼)分離的第一步。然而,標準方法功能不夠強大,以至于開發者無法僅僅使用它們開發應用,還要在JSP頁面中使用Java代碼。

介于JavaBean中解決展現與業務實現分離的方法的不完善,就產生了JSP1.1中的自定義標簽。自定義標簽提供了在JavaBean中所不能實現的便利。其中就包括,自定義標簽允許訪問JSP隱藏的對象及它們的屬性。

盡管自定義標簽能編寫無腳本的JSP頁面,但是JSP1.1和JSP1.2中提供的經典自定義標簽非常難用。直到JSP2.0,才增加兩個特性,用于改善自定義標簽實現。第一個特性是一個接口——SimpleTag。另一個特性是標簽文件中定義標簽的機制。

自定義標簽的實現,叫做標簽處理器,而簡單標簽處理器是指繼承SimpleTag實現的標簽處理器。

二、簡單標簽處理器

實現SimpleTag的標簽處理器都叫作簡單標簽處理器;實現Tag、Iteration及BodyTag的標簽處理器都叫作經典標簽處理器。

簡單標簽處理器有著簡單的生命周期,而且比經典標簽處理器更加容易實現。SimpleTag接口中用于標簽觸發的方法只有一個——doTag,并且此方法只執行一次。業務邏輯、遍歷及頁面內容操作都在這里實現。簡單標簽處理器中的頁面內容都在JspFragment類的實例中體現。

簡單標簽的生命周期如下:

JSP容器通過簡單標簽處理器的無參數構造器創建它的實例。

JSP容器通過setJspContext的方法,傳入JspContext對象。

如果自定義標簽被另一個自定義標簽所嵌套,JSP容器就會調用setParent的方法。

JSP容器調用該標簽中所定義的每個屬性的set方法。

如果需要處理頁面內容,JSP容器還會調用SimpleTag接口的setJspBody方法,把使用JSPFragment封裝的頁面內容傳過來。

javax.servlet.jsp.tagext 包中也包含了一個SimpleTag的基礎類:SimpleTagSupport。它提供了SimpleTag所有方法的默認實現。

三、實例

自定義標簽需要有兩個步驟:編寫標簽處理器及注冊標簽。

1. 編寫標簽處理器

packagecustomtag;importjava.io.IOException;importjava.util.StringTokenizer;importjavax.servlet.jsp.JspContext;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.SimpleTagSupport;public class DataFormatterTag extendsSimpleTagSupport {private String header; //標簽屬性

privateString items;public voidsetHeader(String header) {this.header =header;

}public voidsetItems(String items) {this.items =items;

}public void doTag() throws IOException, JspException { //標簽處理函數

JspContext jspContext = getJspContext(); //返回JspFragment關聯的JspContext對象

JspWriter out = jspContext.getOut(); //通過JspContext實例中的getOut方法獲取JspWriter對象

out.print("

" + header +"

StringTokenizer tokenizer= new StringTokenizer(items,",");while(tokenizer.hasMoreElements()) {

String token=tokenizer.nextToken();

out.print("

" + token + "\n");

}

out.print("

");

}

}

2. 注冊標簽

Simple tag examples

1.0

1.1

My First Taglib Example

/firstTag

dataFormatter

customtag.DataFormatterTag

empty

header

true

items

true

3. 在JSP頁面中使用自定義標簽

1

2

3

4

5

TestingFormatterTag

6

7

8

9

10

11

12

13

14 US,UK,Canada,Korea15

16

17

18

19

運行效果:

四.處理屬性

實現SimpleTag接口或者擴展SimpleTagSupport的標簽處理器都可以有屬性。下面的例子展示了名為DateFormatTag的標簽處理器可以將逗號分隔內容轉換成HTML表格。

①標簽處理器

1 packagecustomtag;2

3 importjava.io.IOException;4 importjava.util.StringTokenizer;5

6 importjavax.servlet.jsp.JspContext;7 importjavax.servlet.jsp.JspException;8 importjavax.servlet.jsp.JspWriter;9 importjavax.servlet.jsp.tagext.SimpleTagSupport;10

11 public class DataFormatterTag extendsSimpleTagSupport {12 privateString header;13 privateString items;14

15 public voidsetHeader(String header) {16 this.header =header;17 }18

19 public voidsetItems(String items) {20 this.items =items;21 }22

23 public void doTag() throwsIOException, JspException {24 JspContext jspContext =getJspContext();25 JspWriter out =jspContext.getOut();26

27 out.print("

" + header +"
" + token + "

34 out.print("

");35 }36 }

②jsp頁面實現

TestingFormatterTag

US,UK,Canada,Korea

③效果展示

五.訪問標簽內容

在SimpleTag中,可以通過JSP容器傳入的JspFragment來訪問標簽內容。JspFragment類提供了多次訪問Jsp中這部分代碼的能力。JSP片段的定義不能包含腳本或者腳本表達式,他只能是文件模板或者JSP標準結點。

JspFragment類中有兩個方法:getJspContext、invoke。定義如下:

public abstractJspContext getJspContext()public abstract voidinvoke(java.io.Writer writer)throws JspException, java.io.IOException

getJspContext方法返回這個JspFragment關聯的JspContext對象。可以通過invoke方法來執行這個片段(標簽的內容),然后通過指定的Writer對象把它直接輸出。如果把null傳入invoke方法中,那么這個Writer將會被JspFragment所關聯的JspContext對象中的getOut方法返回的JspWriter所接管。下面看一個示例:

SelectElementTag

packagecustomtag;importjava.io.IOException;importjavax.servlet.jsp.JspContext;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.SimpleTagSupport;public class SelectElementTag extendsSimpleTagSupport{private String[] countries = {"Australia", "Brazil", "China"};public void doTag() throwsIOException, JspException {

JspContext jspContext=getJspContext();

JspWriter out=jspContext.getOut();

out.print("\n");for(int i=0;i<3;i++){

getJspContext().setAttribute("value", countries[i]);

getJspContext().setAttribute("text", countries[i]);

getJspBody().invoke(null);

}

out.print("\n");

}

}

注冊SelectElementTag

select

customtag.SelectElementTag

scriptless

selectElementTagTest頁面

Testing SelectElementFormatterTag

${text}

效果

六、編寫EL函數

一般來說,編寫EL函數需要以下兩個步驟:

(1)創建一個包含靜態方法的public類。每個類的靜態方法表示一個EL函數。這個類可以不需要實現任何接口或者繼承特定的類。可以像發布任何類一樣發布這個類。這個類必須放在應用中的/WEB-INF/classes目錄或者它的子目錄下。

(2)用function節點在標簽庫描述其中注冊這個函數。

function節點是taglib節點的下級節點,它有如下子節點:

description:可選,標簽說明。

display-name:在XML工具中顯示的縮寫名字。

icon:可選,在XML工具中使用的icon節點。

name:函數的唯一名字。

function-class:該函數對應實現的Java類的全名。

function-signature:該函數對應實現的Java靜態方法。

example:可選,使用該函數的示例說明。

function-extension:可以是一個或者多個節點,在XML工具中使用,用于提供該函數的更多的細節。

要使用這個函數,必須將taglib指令中的URI屬性指向標簽庫描述,并指明使用的前綴。然后在JSP頁面中使用如下語法來訪問該函數:

${ prefix:functionName(parameterList) }

具體看以下示例:

StringFunction類中的reverseString方法

packagefunction;public classStringFunctions {public staticString reverseString(String s){return newStringBuffer(s).reverse().toString();

}

}

functiontags.tld文件

Function tag examples

1.0

Reverses a String

reverseString

function.StringFunctions

java.lang.String reverseString(java.lang.String)

使用EL函數

Testing reverseString function

效果

七、發布自定義標簽

可以吧自定義的標簽處理器以及標簽描述器打包到JAR包里,這樣就可以把它發布出來給別人使用了,就像JSTL一樣。這種情況下,需要包含其所有的標簽處理器及描述它們的TLD文件。此外,還需要在描述其中的URI節點中指定絕對的URI。

為了在應用中使用這個庫,需要把這個JAR文件拷貝到應用的WEB-INF/lib目錄下。在使用的時候,任何使用自定義標簽的JSP頁面都要使用和這個標簽庫描述器中定義的URL。

------ 天若有情天亦老,人間正道是滄桑 ------

總結

以上是生活随笔為你收集整理的java web 自定义标签_JavaWeb学习——自定义标签的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。