亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

利用JSP 2.0開發Web應用程序1

2024-09-05 00:20:29
字體:
來源:轉載
供稿:網友

  jsp(javaserver pages)技術是對servlet的進一步抽象,它由jcp(java community process)開發,是用于生成動態內容的開放式的、可免費獲取的規范,也是j2ee(java 2 enterprise edition)規范的重要組成部分。許多商業應用服務器如bea weblogic、ibm websphere、live jrun和orion都支持jsp技術。

  從機票預訂系統、銀行系統到購物系統,web上到處都在應用jsp技術。新發布的2.0版是對jsp1.2的升級,增加了一些有趣的新特性。jsp2的目標是使動態網頁的設計更加容易,而且無需學習java編程語言。

  本文內容包括:

  • 提供具有豐富示例代碼的教程來使你熟悉jsp2.0
  • 介紹jsp2.0的新特性
  • 提供利用jsp2.0開發應用程序的一些體會
  • 給出了一些示例代碼,對這些代碼稍加修改即可用于你自己的應用程序。

  如果你還不熟悉jsp,那么直接從jsp2.0入手是一個不錯的主意。但是如果希望學習jsp1.2,也許你需要從jsp教程開始學習。

  jsp 2.0

  jsp 2.0是對jsp 1.2的升級,增加了幾個有趣的新特性,可以使web應用程序設計人員和開發人員的工作更容易一些。jsp 2.0的目標是比以前更易于使用,更重要的是無須學習java語言本身就可以使用它。它增加了一種稱為simpletag的新擴展機制來簡化標簽api(tag api)。

除了其他一些改進外,jsp 2.0引入的最主要的新特性包括:

  1. 一種簡單的表達式語言(el),能夠用來容易地從jsp頁面訪問數據,這種表達式語言簡化了基于jsp的不含腳本的應用程序的編寫,不需要使用java scriptlet或者java表達式;
  2. 用于直接使用jsp技術來定義可重用的自定義行為的新語法,該語法使用.tag和.tagx文件,這類文件可由開發人員或者網頁作者編寫;
  3. 3xml語法得到了實質性的改進,增加了新的標準文件擴展名(.tagx用于標簽文件,.jspx用于jsp文件)。

  本文主要討論表達式語言、簡化的標簽api和標簽文件。相信目前的jsp開發人員將會發現這些重要的特性不但有趣,而且非常有用。

  為何要從1.2跨越到2.0?

  在java規格請求(jsr 152)中版本號最初定為1.3。但是正如你將在后面看到的那樣,由于這些新特性對jsp應用程序的開發模型產生了如此深刻的影響,專家組感到有必要把主版本號升級到2.0,這樣才能充分反映這種影響。此外,新的版本號也有助于把開發人員的注意力吸引到這些有趣的新特性上來。令人欣慰的是,所有合法的jsp1.2頁面同時也是合法的jsp2.0頁面。

  jsp 2.0起步

  在著手學習jsp 2.0之前,你需要一個支持jsp2.0和java servlet 2.4規范的jsp環境。幸運的是,jakarta tomcat 5.0(alpha測試版)支持新的jsp2.0和servlet 2.4規范,可以從http://jakarta.apache.org/builds/jakarta-tomcat/release/v5.0.4-alpha/下載并安裝tomcat 5.0

  jsp表達式語言

  向jsp網頁傳遞信息是通過jsp scoped屬性和請求參數完成的。專門為網頁作者量身定做的一種表達式語言(el)把jsp scoped屬性提升為從業務邏輯向jsp頁面傳遞信息的標準方式。但是要注意,盡管這種表達式語言是jsp的一個重要特性,它并不是一種通用的程序語言。它僅僅是一種數據訪問語言,可以方便地訪問和處理應用程序數據,而無需使用scriptlet或者請求時(request-time)表達式的值。

在jsp2.0之前,網頁作者只能使用表達式<%= aname %>訪問系統的值,比如下面的例子:

<sometags:atag attribute="<%= pagecontext.getattribute("aname") %>">

或者使用自定義javabeans組件的值:

<%= acustomer.getaddress().getcountry() %>

表達式語言允許網頁作者使用簡單的語法訪問對象。比如要訪問一個簡單變量,可以像下面這樣寫:

<sometags:atag attribute="${ aname}">

而訪問嵌套的javabeans屬性,則可以像下面這樣寫:

${ acustomer.address.country}

你可能會問,這不是javascript的語法嗎?完全正確!如果你使用過javascript,就會感到非常輕松,因為表達式語言正是借用了訪問結構化數據的javascript語法。


注意:表達式語言最初是作為jsp標準標簽庫(jstl)1.0的一部分而開發的,jstl是一種標準標簽庫,它提供對通用的、結構化的任務的支持,如迭代和條件、xml文檔處理、國際化和利用sql訪問數據庫等。jstl規范是由jsr 52專家組開發的。關于jstl的介紹,請參見faster development with jstl(使用jstl加速開發).


訪問應用程序數據

可以使用點號運算符(.)訪問作為對象屬性的應用程序數據,也可使用方括號運算符[‘name’]訪問命名的數組元素。

表達式${ data}表示名為data的scoped變量??梢允褂命c號(.)或方括號([])運算符從集合中檢索屬性值:

  • 點號運算符用于訪問命名的屬性,比如表達式${ customer.name}表示scoped變量customer的name屬性;
  • 方括號運算符可用于檢索命名的屬性,比如在${ customer[“name”]}中。也可以通過${ customers[0]}的形式來訪問集合customers中的第一項。

表達式語言統一了對點號和方括號運算符的處理,因此${ customer.name}與${ customer[“name”]}是等價的。正如你看到的那樣,表達式必須使用${ 和}包圍起來。

el的標識符求值方式是使用pagecontext.findattribute(string),把標識符作為一個屬性來查找它的值。如果沒有找到該屬性,則返回null。

運算符

表達式語言支持算術運算符、關系運算符和邏輯運算符,以完成大多數的數據處理操作。此外,它還提供了一個用于測試一個對象是否為空的特殊運算符。運算符如表1所示。你可以使用empty運算符判斷某個集合或字符串是否為空。比方說,只有當要求的命名參數param沒有給出時,表達式${ empty param.name}才返回真。empty運算符可以與“!”運算符一起使用,比如${ !empty param.name}當要求的命名參數param存在時返回真。

1:表達式語言運算符

運算符

說明

+

-

*

/ 或 div

% 或 mod

模(求余)

== 或 =

等于

!= 或 !=

不等于

< 或 lt

小于

> 或 gt

大于

<= 或 le

小于等于

>= 或 ge

大于等于

&& 或 and

邏輯與

|| or or

邏輯或

! 或 not

邏輯非

empty

檢查是否為空值

a ? b : c

條件運算符

隱含對象

除了運算符外,表達式語言還定義了一些隱含對象以支持網頁作者訪問需要的應用程序數據。表達式語言定義的隱含對象如表2所示,后面將給出使用這些隱含對象的一個例子。

2:表達式語言中的隱含對象

隱含對象

內容

applicationscope

應用程序范圍內的scoped變量組成的集合

cookie

所有cookie組成的集合

header

http請求頭部,字符串

headervalues

http請求頭部,字符串集合

initparam

全部應用程序參數名組成的集合

pagecontext

當前頁面的javax.servlet.jsp.pagecontext對象

pagescope

頁面范圍內所有對象的集合

param

所有請求參數字符串組成的集合

paramvalues

所有作為字符串集合的請求參數

requestscope

所有請求范圍的對象的集合

sessionscope

所有會話范圍的對象的集合

表達式語言的例子

如你所言,網頁作者無須學習java也能夠使用這種表達式語言。示例代碼1顯示了一些表達式的例子和隱含對象的使用。

代碼示例1: ex1.jsp

要運行這個例子,請參照以下步驟,這里我們假定tomcat 5.0安裝在c:/tomcat5.0下。

  1. 切換目錄到 c:/tomcat5.0/webapps/jsp-examples
  2. 創建新目錄,名字可以是任意的,比如jsp2-tutorial
  3. 切換到jsp2-tutorial
  4. 把ex1.jsp復制并保存到該目錄下
  5. 啟動tomcat 5服務器:指向“開始”->“程序”->“apache tomcat 5.0”,單擊“apache tomcat 5.0”來啟動tomcat
  6. 在瀏覽器中輸入http://localhost:8080/jsp-examples/jsp2-tutorial/ex1.jsp

你將看到類似圖1所示的畫面。使用表達式語言就這么簡單!


1jsp表達式語言和隱含對象


注意: 在本文中,所有的jsp文件都保存在c:/tomcat5.0/webapps/jsp-examples/jsp2-tutorial目錄下。


填充表單例子

隱含對象可用于讀取填充表單的數據。代碼示例2給出了一個簡單的表單,該表單提示用戶輸入一個名字。

代碼示例2: form.jsp

<html>
<head>
<title>form content</title>
</head><body><h3>fill-out-form</h3>
<p>
<form action="form.jsp" method="get">
name = <input type="text" name="name" value="${param['name']}">
<input type="submit" value="submit name"></form>
<p>
the name is: ${param.name}
</body>
</html>

在本例中,當用戶輸入名字并單擊“提交”按鈕時,輸入的名字就會顯示同一頁面中的“the name is:”字樣后面,如圖2所示。

同樣,運行這個例子只需要把form.jsp復制到c:/tomcat5.0/webapps/jsp-examples/jsp2-tutorial下并用瀏覽器打開它。


2:表單處理

定義和使用函數

表達式語言允許你定義可在表達式中調用的函數。函數必須作為public類中的public static方法編寫。函數一經定義,它的簽名(signature)就映射到標簽庫描述符(tld)中。

為了說明函數的使用,我們舉一個簡單的例子,把兩個數相加。首先要編寫求兩數之和的java方法代碼,如代碼示例3所示,這里定義了一個靜態方法,它接收兩個字符串參數,把它們解析成整數并返回它們的和。

代碼示例3: compute.java

package jsp2.examples.el;
import java.util.*;
public class compute {
public static int add(string x, string y) {
int a = 0;
int b = 0;
try {
a = integer.parseint(x);
b = integer.parseint(y);
}catch(exception e) {}
return a + b;
}
}

用javac把這段代碼編譯成功后,下一步就要把函數的簽名映射到標簽庫。代碼示例4說明了如何把add函數映射到包含函數實現和函數簽名的類。后面將說明把這段代碼添加到哪兒。

代碼示例4: 函數描述符

    <function>
<description>add x and y</description>
<name>add</name>
<function-class>jsp2.examples.el.compute
</function-class>
<function-signature>int
add(java.lang.string,java.lang.string)
</function-signature>
</function>

現在我們就可以編寫一個jsp頁面來使用這個函數。代碼示例5是包含兩個字段的一個表單,用戶輸入兩個數字并按下“求和”按鈕,就會調用上面的函數并把兩個數相加,結果在同一個頁面中顯示出來。

代碼示例5: math.jsp

<%@ taglib prefix="my" 
uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>
<head>
<title>functions</title>
</head>
<body>
<h3>add numbers</h3>
<p>
<form action="math.jsp" method="get">
x = <input type="text" name="x" value="${param["x"]}">
<br>
y = <input type="text" name="y" value="${param["y"]}">
<input type="submit" value="add numbers">
</form>
<p>
the sum is: ${my:add(param["x"],param["y"])}
</body>
</html>

要運行這個例子:

  1. 復制compute.java并保存到c:/tomcat5.0/webapps/jsp-examples/web-inf/classes/jsp2/examples/el下;
  2. 使用javac編譯compute.java;
  3. 編輯文件c:/tomcat5.0/webapps/jsp-examples/web-inf/jsp2/jsp2-example-taglib.tld,把代碼示例4中的代碼段添加到文件中最后一個</function>標簽之后,</taglib>標簽之前;
  4. 復制math.jsp并保存到c:/tomcat5.0/webapps/jsp-examples/jsp2-tutorial下;
  5. 用瀏覽器打開該文件。

如果一切正常,應該會看到類似如圖3所示的窗口。


3:使用函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图色老头| 亚洲国产精品国自产拍av秋霞| 欧美有码在线视频| 日韩电影在线观看免费| 成人黄色短视频在线观看| 韩曰欧美视频免费观看| 热久久视久久精品18亚洲精品| 亚洲欧美国产日韩中文字幕| 日韩a**站在线观看| 日韩av一区在线观看| 国产精品欧美日韩久久| 欧美性猛交xxxx乱大交| 久久久999国产| 国产一区玩具在线观看| 91久久久久久国产精品| 久久亚洲影音av资源网| 色综合久久精品亚洲国产| 亚洲色在线视频| 91成人在线播放| 狠狠色狠狠色综合日日五| 成人精品久久一区二区三区| 亚洲香蕉在线观看| 日韩在线欧美在线| 欧美综合激情网| 亚洲精品国产综合区久久久久久久| 亚洲国产精品久久久久久| 91精品国产色综合久久不卡98| 国产99久久精品一区二区 夜夜躁日日躁| 精品性高朝久久久久久久| 人九九综合九九宗合| 国产国语videosex另类| 午夜精品久久久久久久男人的天堂| 26uuu亚洲伊人春色| 欧美日韩国产123| 欧美成人免费大片| 国内精品久久久久伊人av| 91成人免费观看网站| 色综合91久久精品中文字幕| 日韩人体视频一二区| 97在线精品国自产拍中文| 久久男人资源视频| 久久夜色精品亚洲噜噜国产mv| 亚洲一区二区免费在线| 中文字幕亚洲欧美在线| 成人黄色av免费在线观看| 91精品国产91久久久久久| 午夜精品久久17c| 欧美亚洲在线视频| 成人精品久久一区二区三区| 国产精品亚洲网站| 日韩av在线电影网| 久久久久久久久久久网站| 久久激情视频久久| 欧美日韩国产成人在线| 日韩欧美福利视频| 一区二区中文字幕| 亚洲国产成人av在线| 欧美一区二区三区免费视| 欧洲s码亚洲m码精品一区| 国产精品国产自产拍高清av水多| 欧美精品精品精品精品免费| 国产精品香蕉在线观看| 亚洲电影免费观看高清完整版在线观看| 国产精品久久久久久久久影视| 日韩欧美中文免费| 91久久精品久久国产性色也91| 97国产在线视频| 好吊成人免视频| 欧美激情视频一区二区| 国产精品久久精品| 亚洲最大的网站| 久久久久999| 精品欧美aⅴ在线网站| 欧美激情videos| 中文字幕自拍vr一区二区三区| 亚洲视频网站在线观看| 欧美日韩国产黄| 欧美日韩国产综合视频在线观看中文| 精品国产精品自拍| 久久全国免费视频| 亚洲肉体裸体xxxx137| 国产一区二区三区在线看| 久热国产精品视频| 亚洲国产女人aaa毛片在线| 91精品久久久久久久久久| 午夜精品久久久久久久99热浪潮| 久久精品一偷一偷国产| 亚洲精品影视在线观看| 91精品国产电影| 在线播放国产精品| 成人免费网站在线观看| 在线性视频日韩欧美| 亚洲国产精品免费| 日本韩国在线不卡| 亚洲综合在线中文字幕| 中文字幕综合一区| 日韩久久午夜影院| 亚洲3p在线观看| 国产精欧美一区二区三区| 日本欧美精品在线| 久久精品91久久久久久再现| 久久成人精品电影| 日日骚av一区| 日本韩国在线不卡| 亚洲激情电影中文字幕| 国内外成人免费激情在线视频网站| 2019中文字幕在线免费观看| 久久久精品亚洲| 国产一区玩具在线观看| 亚州精品天堂中文字幕| 国产九九精品视频| 亚洲精品美女久久久| 欧美日韩亚洲一区二区| 亚洲天堂第一页| 国产欧美一区二区三区在线| 亚洲国产一区自拍| 久久精品91久久久久久再现| 亚洲成色www8888| 成人av在线亚洲| 91中文精品字幕在线视频| 欧美二区在线播放| 麻豆乱码国产一区二区三区| 国产精品极品美女粉嫩高清在线| 中文字幕国产亚洲| 成人免费激情视频| 中文字幕av一区| 中文字幕日韩精品有码视频| 国产女同一区二区| 国内揄拍国内精品| 97精品国产97久久久久久春色| 国产精品免费看久久久香蕉| 久久影视电视剧凤归四时歌| 欧美午夜丰满在线18影院| 亚洲精品久久久久中文字幕欢迎你| 另类天堂视频在线观看| 亚洲精品美女在线观看播放| 精品一区二区三区三区| 亚洲成人av在线| 亚洲毛片在线免费观看| 国产精品1区2区在线观看| 亚洲国产第一页| 欧美性videos高清精品| 欧美尤物巨大精品爽| 国产成人短视频| 欧美日韩中文在线| 少妇av一区二区三区| 另类视频在线观看| 国产精品电影久久久久电影网| 欧美日韩精品国产| 欧美成人剧情片在线观看| 亚洲激情成人网| 欧美在线免费观看| 92版电视剧仙鹤神针在线观看| 国产成人综合亚洲| 日韩在线精品视频| 亚洲国产欧美一区二区三区久久| 亚洲精品国产免费| 国产精品久久久久久婷婷天堂| 国产精品女人久久久久久| 久久露脸国产精品| 欧美自拍大量在线观看| 在线视频免费一区二区| 国产精品高潮呻吟视频| 中文在线资源观看视频网站免费不卡|