自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSP變量在規(guī)范中的范圍

開(kāi)發(fā) 后端
本文介紹JSP變量在規(guī)范中稱作范圍變量,以及介紹簡(jiǎn)單標(biāo)記API 概述,限制和變通方法和導(dǎo)出變量的標(biāo)記。

JavaServer Pages (JSP) 和 JSP規(guī)范標(biāo)準(zhǔn)標(biāo)記庫(kù) (JSTL) 為 Web 開(kāi)發(fā)人員提供了許多有用的標(biāo)記(也稱作操作)。此外,JSP 2.0 還提供兩個(gè) API,即標(biāo)準(zhǔn)標(biāo)記 API 和簡(jiǎn)單標(biāo)記 API,用于構(gòu)建定制標(biāo)記/操作。前一個(gè) API 繼承自 JSP 1.x,并由于歷史原因而由 JSTL 使用。(由于 JSTL 1.0 的開(kāi)發(fā)在 JSP 2.0 之前,因此新 API 不包含 JSTL 1.1。)此外,JSTL 也不使用 JSP 片段和動(dòng)態(tài)屬性等 JSP 新特性。本文使用 JSP 2.0 的新 API 和特性構(gòu)建定制標(biāo)記擴(kuò)展 JSTL。本文提供 API 概述并演示如何開(kāi)發(fā)
◆導(dǎo)出變量的標(biāo)記
◆條件標(biāo)記
◆迭代標(biāo)記
◆具有動(dòng)態(tài)屬性的標(biāo)記
◆協(xié)調(diào)標(biāo)記

簡(jiǎn)單標(biāo)記API 概述

在 JSP 頁(yè)面中使用定制標(biāo)記時(shí),應(yīng)用服務(wù)器的 JSP容器將 ... 轉(zhuǎn)換為調(diào)用稱為標(biāo)記處理類的方法的 Java 代碼。因此,如果要開(kāi)發(fā)定制標(biāo)記,必須提供一個(gè)標(biāo)記處理類,此類必須使用 JSP 1.x 標(biāo)準(zhǔn)標(biāo)記 API 或 JSP 2.0 簡(jiǎn)單標(biāo)記 API。比較一下這兩個(gè) API,就會(huì)發(fā)現(xiàn)新 API 更易于使用。簡(jiǎn)單標(biāo)記 API 只有一個(gè)接口 (javax.servlet.jsp.tagext.SimpleTag),它定義了處理定制標(biāo)記的方法。通常從 JSP容器從 JSP 頁(yè)面中自動(dòng)生成的 Java Servlet 中調(diào)用這些方法。

javax.servlet.jsp.tagext.SimpleTagSupport 類實(shí)現(xiàn)了 SimpleTag 接口,因此當(dāng)標(biāo)記處理類擴(kuò)展 SimpleTagSupport 時(shí)只須編寫 doTag() 方法即可。以下步驟介紹了如何開(kāi)發(fā)一個(gè)簡(jiǎn)單的標(biāo)記處理類:

第 1 步:設(shè)計(jì)定制標(biāo)記
首先,必須為標(biāo)記選擇一個(gè)名稱并設(shè)置它的屬性。然后,創(chuàng)建一個(gè)標(biāo)記庫(kù)描述符 (TLD) 文件(采用由 JSP規(guī)范定義的 XML 格式),以告知 JSP容器如何處理和驗(yàn)證定制標(biāo)記。文本提供了一個(gè)名為 util.tld 的示例 TLD 文件。

第 2 步:創(chuàng)建標(biāo)記處理類
必須提供一個(gè)用于實(shí)現(xiàn) SimpleTag 接口的 Java 類。最簡(jiǎn)單的方法是擴(kuò)展 SimpleTagSupport 或它的某個(gè)子類。本文中的 VarTagSupport、IfTag 和 WhileTag 類用于擴(kuò)展 SimpleTagSupport。其他標(biāo)記處理類示例擴(kuò)展 VarTagSupport。

如果要使用未在 TLD 文件中指定的屬性,則標(biāo)記處理類必須實(shí)現(xiàn) javax.servlet.jsp.tagext.DynamicAttributes 接口(如“具有動(dòng)態(tài)屬性的標(biāo)記”部分中介紹的 MapTag 示例所示)。

第 3 步:初始化標(biāo)記處理類實(shí)例
每個(gè)標(biāo)記處理類都必須包含一個(gè)不帶參數(shù)的公共構(gòu)造函數(shù),用于放置初始化代碼。本文中的某些標(biāo)記處理類(EvalTag、ListTag 和 MapTag)包含一個(gè)無(wú)參數(shù)的公共構(gòu)造函數(shù),它使用默認(rèn)值初始化實(shí)例變量。其他類(IfTag、WhileTag 和 ItemTag)沒(méi)有構(gòu)造函數(shù)。請(qǐng)注意,Java 編譯器在類不包含任何構(gòu)造函數(shù)的情況下自動(dòng)生成一個(gè)無(wú)參數(shù)的公共構(gòu)造函數(shù),該函數(shù)不執(zhí)行任何操作。

第 4 步:提供屬性設(shè)置方法
JSP 頁(yè)面中的標(biāo)記屬性值通過(guò) setAttribute() 方法傳遞給標(biāo)記處理類。例如,本文中的 標(biāo)記包含四個(gè)屬性:var、scope、expr 和 type。EvalTag 處理類實(shí)現(xiàn) setExpr() 和 setType() 方法,并從 VarTagSupport 繼承 setVar() 和 setScope()。

動(dòng)態(tài)屬性通過(guò) DynamicAttributes 接口定義的 setDynamicAttribute() 方法傳遞。

第 5 步:實(shí)現(xiàn) doTag() 方法
該方法用于實(shí)現(xiàn)定制標(biāo)記的邏輯。doTag() 方法由 JSP容器繼所有屬性設(shè)置方法之后調(diào)用。此處可以使用 getJspContext() 獲得一個(gè) javax.servlet.jsp.JspContext 對(duì)象來(lái)訪問(wèn) JSP 環(huán)境??梢哉{(diào)用 getJspBody(),它返回 javax.servlet.jsp.tagext.JspFragment 的實(shí)例,該實(shí)例表示位于 之間的 JSP 主體。如果要開(kāi)發(fā)協(xié)同工作的標(biāo)記,如 (本文的最后一部分將對(duì)其進(jìn)行介紹),則還可以使用 getParent() 和 findAncestorWithClass() 方法。

第 6 步:測(cè)試定制標(biāo)記
使用定制標(biāo)記的 JSP 頁(yè)面必須使用 <%@taglib%>指令導(dǎo)入該標(biāo)記的標(biāo)記庫(kù)。當(dāng)定制標(biāo)記出現(xiàn)在 JSP 頁(yè)面中時(shí),JSP容器將生成創(chuàng)建標(biāo)記處理類實(shí)例、調(diào)用屬性設(shè)置方法和調(diào)用 doTag() 方法的代碼。因此,在使用定制標(biāo)記的 JSP 頁(yè)面的執(zhí)行過(guò)程中將調(diào)用標(biāo)記處理類方法。

限制和變通方法

為簡(jiǎn)化標(biāo)記處理 API,JSP 2.0 采取了一個(gè)限制:如果定制標(biāo)記的處理類是基于簡(jiǎn)單標(biāo)記 API 的,則頁(yè)面作者不得在 之間使用 JSP 1.x 聲明 (<%!...%>)、JSP 1.x 表達(dá)式 (<%=...%>) 和 scriptlet (<%...%>)。大多數(shù)情況下,您可以將 JSP 頁(yè)面中的 Java 代碼移動(dòng)到標(biāo)記處理類中,或在 JSP 2.0 表達(dá)式 (${...})(可以在定制標(biāo)記的主體中使用)中使用 JSTL。請(qǐng)注意,JSP 2.0 允許您在基于標(biāo)準(zhǔn)標(biāo)記 API 的定制標(biāo)記主體中使用 scriptlet。然而,由于不使用腳本的 JSP 頁(yè)面更易于維護(hù),因此最好避免在 Web 頁(yè)中使用 Java 代碼。

我的上一篇 Oracle 技術(shù)網(wǎng) (OTN) 文章“使用 JSP 2.0 EL API”介紹了簡(jiǎn)單標(biāo)記 API 的另一個(gè)限制并提供了變通方法。JspContext 類未提供對(duì) JSP 隱式對(duì)象(如application、session、request 和 response)的訪問(wèn)。大多數(shù)應(yīng)用服務(wù)器(包括 Oracle Application Server Containers for J2EE (OC4J) 10g)允許將 JSP 上下文轉(zhuǎn)換為 PageContext

標(biāo)記處理類不適用于使用 println() 語(yǔ)句生成大量可重用的 HTML 代碼。JSP 2.0 為此工作提供了一個(gè)更好的方法。所謂的標(biāo)記文件使用 JSP 語(yǔ)法并由 JSP容器自動(dòng)轉(zhuǎn)換為基于簡(jiǎn)單標(biāo)記 API 的標(biāo)記處理類。我的另一篇 OTN 文章“創(chuàng)建 JSP 2.0 標(biāo)記文件”介紹了這個(gè) JSP 新特性。

導(dǎo)出變量的標(biāo)記

許多 JSTL 標(biāo)記實(shí)現(xiàn)某個(gè)邏輯并導(dǎo)出 JSP變量以報(bào)告結(jié)果。例如, 包含一個(gè) var 屬性,該屬性必須指定用于保存 SQL 結(jié)果集的 JSP變量的名稱。var 屬性對(duì)其他 JSTL 標(biāo)記(如 )來(lái)說(shuō)是可選的。如果 var 屬性不存在,則這些標(biāo)記將輸出它們的結(jié)果。所有包含 var 屬性的標(biāo)記還包含一個(gè) scope 屬性,該屬性可用于指示以下 JSP變量的作用域:page、request、session 或 application。

VarTagSupport 類(它是為本文開(kāi)發(fā)的一個(gè)示例)擴(kuò)展 SimpleTagSupport 并為 var 和 scope 屬性提供設(shè)置方法。VarTagSupport 包含用于導(dǎo)出 JSP變量、獲取主體內(nèi)容和輸出內(nèi)容的實(shí)用方法,而不是實(shí)現(xiàn) doTag() 方法。這些方法由 VarTagSupport 的子類在 doTag() 中使用。本文包含四個(gè)用于擴(kuò)展 VarTagSupport 的標(biāo)記處理類(EvalTag、MapTag、ListTag 和 ItemTag)。

請(qǐng)注意,JSP變量在 JSTL 規(guī)范中稱作范圍變量,而在 JSP規(guī)范中稱作具名變量或范圍屬性。這些變量通過(guò) JspContext 類的 setAttribute() 方法創(chuàng)建/導(dǎo)出。您可以在 JSP 頁(yè)面中使用 ${varName},以及在 Java 代碼中使用 JspContext 的 getAttribute() 或 findAttribute() 方法取得它們的值。不要混淆 JSP變量與標(biāo)記屬性。

【編輯推薦】

  1. 簡(jiǎn)單介紹JSP技術(shù)
  2. 需要掌握的十個(gè)JSP標(biāo)簽庫(kù)
  3. JSP技術(shù)中表單數(shù)據(jù)存儲(chǔ)的通用方法
  4. 詳解JSP技術(shù)的方法
  5. 怎樣學(xué)習(xí)JSP技術(shù)
責(zé)任編輯:佚名 來(lái)源: cnblogs
相關(guān)推薦

2009-07-02 13:51:05

對(duì)象和范圍屬性

2009-06-29 17:09:49

JavaBeanJSP

2009-07-21 16:58:31

Scala變量范圍

2009-06-10 17:03:36

JSP動(dòng)態(tài)生成

2009-07-02 09:25:41

JSP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)

2011-07-04 17:27:42

JSP

2009-07-01 18:12:18

JSP的優(yōu)勢(shì)性能比較

2009-06-16 15:20:48

ApplicationJSP程序

2009-07-03 16:13:10

JSP環(huán)境變量

2009-06-29 17:57:30

ApplicationJSP

2009-07-08 15:13:00

獲取所session數(shù)JSPServlet

2009-07-06 15:57:56

獲取數(shù)據(jù)庫(kù)連接JSP

2010-03-15 10:24:20

Python函數(shù)變量

2009-07-03 16:46:07

JSP環(huán)境變量

2009-07-01 16:14:48

JSP網(wǎng)頁(yè)制作

2009-06-25 16:36:31

JBPM流程圖

2009-03-05 10:10:52

餅圖數(shù)據(jù)庫(kù)JSP

2009-06-30 10:59:38

fckeditorJSP

2009-07-02 11:06:57

JSP預(yù)定義變量

2010-01-14 17:41:57

VB.NET變量范圍
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)