成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSP變量在規范中的范圍

開發 后端
本文介紹JSP變量在規范中稱作范圍變量,以及介紹簡單標記API 概述,限制和變通方法和導出變量的標記。

JavaServer Pages (JSP) 和 JSP規范標準標記庫 (JSTL) 為 Web 開發人員提供了許多有用的標記(也稱作操作)。此外,JSP 2.0 還提供兩個 API,即標準標記 API 和簡單標記 API,用于構建定制標記/操作。前一個 API 繼承自 JSP 1.x,并由于歷史原因而由 JSTL 使用。(由于 JSTL 1.0 的開發在 JSP 2.0 之前,因此新 API 不包含 JSTL 1.1。)此外,JSTL 也不使用 JSP 片段和動態屬性等 JSP 新特性。本文使用 JSP 2.0 的新 API 和特性構建定制標記擴展 JSTL。本文提供 API 概述并演示如何開發
◆導出變量的標記
◆條件標記
◆迭代標記
◆具有動態屬性的標記
◆協調標記

簡單標記API 概述

在 JSP 頁面中使用定制標記時,應用服務器的 JSP容器將 ... 轉換為調用稱為標記處理類的方法的 Java 代碼。因此,如果要開發定制標記,必須提供一個標記處理類,此類必須使用 JSP 1.x 標準標記 API 或 JSP 2.0 簡單標記 API。比較一下這兩個 API,就會發現新 API 更易于使用。簡單標記 API 只有一個接口 (javax.servlet.jsp.tagext.SimpleTag),它定義了處理定制標記的方法。通常從 JSP容器從 JSP 頁面中自動生成的 Java Servlet 中調用這些方法。

javax.servlet.jsp.tagext.SimpleTagSupport 類實現了 SimpleTag 接口,因此當標記處理類擴展 SimpleTagSupport 時只須編寫 doTag() 方法即可。以下步驟介紹了如何開發一個簡單的標記處理類:

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

第 2 步:創建標記處理類
必須提供一個用于實現 SimpleTag 接口的 Java 類。最簡單的方法是擴展 SimpleTagSupport 或它的某個子類。本文中的 VarTagSupport、IfTag 和 WhileTag 類用于擴展 SimpleTagSupport。其他標記處理類示例擴展 VarTagSupport。

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

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

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

動態屬性通過 DynamicAttributes 接口定義的 setDynamicAttribute() 方法傳遞。

第 5 步:實現 doTag() 方法
該方法用于實現定制標記的邏輯。doTag() 方法由 JSP容器繼所有屬性設置方法之后調用。此處可以使用 getJspContext() 獲得一個 javax.servlet.jsp.JspContext 對象來訪問 JSP 環境。可以調用 getJspBody(),它返回 javax.servlet.jsp.tagext.JspFragment 的實例,該實例表示位于 之間的 JSP 主體。如果要開發協同工作的標記,如 (本文的最后一部分將對其進行介紹),則還可以使用 getParent() 和 findAncestorWithClass() 方法。

第 6 步:測試定制標記
使用定制標記的 JSP 頁面必須使用 <%@taglib%>指令導入該標記的標記庫。當定制標記出現在 JSP 頁面中時,JSP容器將生成創建標記處理類實例、調用屬性設置方法和調用 doTag() 方法的代碼。因此,在使用定制標記的 JSP 頁面的執行過程中將調用標記處理類方法。

限制和變通方法

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

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

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

導出變量的標記

許多 JSTL 標記實現某個邏輯并導出 JSP變量以報告結果。例如, 包含一個 var 屬性,該屬性必須指定用于保存 SQL 結果集的 JSP變量的名稱。var 屬性對其他 JSTL 標記(如 )來說是可選的。如果 var 屬性不存在,則這些標記將輸出它們的結果。所有包含 var 屬性的標記還包含一個 scope 屬性,該屬性可用于指示以下 JSP變量的作用域:page、request、session 或 application。

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

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

【編輯推薦】

  1. 簡單介紹JSP技術
  2. 需要掌握的十個JSP標簽庫
  3. JSP技術中表單數據存儲的通用方法
  4. 詳解JSP技術的方法
  5. 怎樣學習JSP技術
責任編輯:佚名 來源: cnblogs
相關推薦

2009-07-02 13:51:05

對象和范圍屬性

2009-06-29 17:09:49

JavaBeanJSP

2009-06-10 17:03:36

JSP動態生成

2009-07-21 16:58:31

Scala變量范圍

2009-07-02 09:25:41

JSP實現頁面跳轉

2011-07-04 17:27:42

JSP

2009-06-16 15:20:48

ApplicationJSP程序

2009-07-01 18:12:18

JSP的優勢性能比較

2009-07-03 16:13:10

JSP環境變量

2009-06-29 17:57:30

ApplicationJSP

2009-07-06 15:57:56

獲取數據庫連接JSP

2009-07-08 15:13:00

獲取所session數JSPServlet

2010-03-15 10:24:20

Python函數變量

2009-07-01 16:14:48

JSP網頁制作

2009-06-25 16:36:31

JBPM流程圖

2009-03-05 10:10:52

餅圖數據庫JSP

2009-06-30 10:59:38

fckeditorJSP

2009-07-03 16:46:07

JSP環境變量

2009-07-02 11:06:57

JSP預定義變量

2011-07-08 16:54:39

JspCookies
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干天天草 | 国产成人在线视频免费观看 | 久久精品福利视频 | 久久亚洲国产 | 欧美一区二区在线观看 | 中文字幕一区二区三区四区五区 | 久久影音先锋 | 久久久久久亚洲 | 亚洲乱码国产乱码精品精的特点 | 秋霞电影一区二区三区 | 97精品超碰一区二区三区 | 久久com | 成人精品鲁一区一区二区 | 成人午夜激情 | 欧美日韩国产精品一区 | 欧美一级黄色片免费观看 | julia中文字幕久久一区二区 | 日韩视频国产 | 久久免费精品视频 | av在线视| 亚洲+变态+欧美+另类+精品 | 青青草社区 | 在线欧美 | 国产大学生情侣呻吟视频 | 国产极品粉嫩美女呻吟在线看人 | 成人午夜免费视频 | 中文字幕国产视频 | 国产欧美一区二区三区在线看 | 欧美片网站免费 | 精品久久久久久亚洲国产800 | 天天爱爱网 | 亚洲高清视频一区二区 | 翔田千里一区二区 | 欧美一级在线 | 我要看免费一级毛片 | 国产精品日韩高清伦字幕搜索 | 日韩精品一区二区三区在线 | 国产精品精品久久久 | 欧美精品欧美精品系列 | 亚洲午夜精品一区二区三区他趣 | 国产欧美精品一区二区三区 |