国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

利用JSP 2.0開發(fā)Web應(yīng)用程序1

2024-09-05 00:20:29
字體:
供稿:網(wǎng)友

  jsp(javaserver pages)技術(shù)是對(duì)servlet的進(jìn)一步抽象,它由jcp(java community process)開發(fā),是用于生成動(dòng)態(tài)內(nèi)容的開放式的、可免費(fèi)獲取的規(guī)范,也是j2ee(java 2 enterprise edition)規(guī)范的重要組成部分。許多商業(yè)應(yīng)用服務(wù)器如bea weblogic、ibm websphere、live jrun和orion都支持jsp技術(shù)。

  從機(jī)票預(yù)訂系統(tǒng)、銀行系統(tǒng)到購物系統(tǒng),web上到處都在應(yīng)用jsp技術(shù)。新發(fā)布的2.0版是對(duì)jsp1.2的升級(jí),增加了一些有趣的新特性。jsp2的目標(biāo)是使動(dòng)態(tài)網(wǎng)頁的設(shè)計(jì)更加容易,而且無需學(xué)習(xí)java編程語言。

  本文內(nèi)容包括:

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

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

  jsp 2.0

  jsp 2.0是對(duì)jsp 1.2的升級(jí),增加了幾個(gè)有趣的新特性,可以使web應(yīng)用程序設(shè)計(jì)人員和開發(fā)人員的工作更容易一些。jsp 2.0的目標(biāo)是比以前更易于使用,更重要的是無須學(xué)習(xí)java語言本身就可以使用它。它增加了一種稱為simpletag的新擴(kuò)展機(jī)制來簡(jiǎn)化標(biāo)簽api(tag api)。

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

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

  本文主要討論表達(dá)式語言、簡(jiǎn)化的標(biāo)簽api和標(biāo)簽文件。相信目前的jsp開發(fā)人員將會(huì)發(fā)現(xiàn)這些重要的特性不但有趣,而且非常有用。

  為何要從1.2跨越到2.0?

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

  jsp 2.0起步

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

  jsp表達(dá)式語言

  向jsp網(wǎng)頁傳遞信息是通過jsp scoped屬性和請(qǐng)求參數(shù)完成的。專門為網(wǎng)頁作者量身定做的一種表達(dá)式語言(el)把jsp scoped屬性提升為從業(yè)務(wù)邏輯向jsp頁面?zhèn)鬟f信息的標(biāo)準(zhǔn)方式。但是要注意,盡管這種表達(dá)式語言是jsp的一個(gè)重要特性,它并不是一種通用的程序語言。它僅僅是一種數(shù)據(jù)訪問語言,可以方便地訪問和處理應(yīng)用程序數(shù)據(jù),而無需使用scriptlet或者請(qǐng)求時(shí)(request-time)表達(dá)式的值。

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

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

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

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

表達(dá)式語言允許網(wǎng)頁作者使用簡(jiǎn)單的語法訪問對(duì)象。比如要訪問一個(gè)簡(jiǎn)單變量,可以像下面這樣寫:

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

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

${ acustomer.address.country}

你可能會(huì)問,這不是javascript的語法嗎?完全正確!如果你使用過javascript,就會(huì)感到非常輕松,因?yàn)楸磉_(dá)式語言正是借用了訪問結(jié)構(gòu)化數(shù)據(jù)的javascript語法。


注意:表達(dá)式語言最初是作為jsp標(biāo)準(zhǔn)標(biāo)簽庫(jstl)1.0的一部分而開發(fā)的,jstl是一種標(biāo)準(zhǔn)標(biāo)簽庫,它提供對(duì)通用的、結(jié)構(gòu)化的任務(wù)的支持,如迭代和條件、xml文檔處理、國(guó)際化和利用sql訪問數(shù)據(jù)庫等。jstl規(guī)范是由jsr 52專家組開發(fā)的。關(guān)于jstl的介紹,請(qǐng)參見faster development with jstl(使用jstl加速開發(fā)).


訪問應(yīng)用程序數(shù)據(jù)

可以使用點(diǎn)號(hào)運(yùn)算符(.)訪問作為對(duì)象屬性的應(yīng)用程序數(shù)據(jù),也可使用方括號(hào)運(yùn)算符[‘name’]訪問命名的數(shù)組元素。

表達(dá)式${ data}表示名為data的scoped變量。可以使用點(diǎn)號(hào)(.)或方括號(hào)([])運(yùn)算符從集合中檢索屬性值:

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

表達(dá)式語言統(tǒng)一了對(duì)點(diǎn)號(hào)和方括號(hào)運(yùn)算符的處理,因此${ customer.name}與${ customer[“name”]}是等價(jià)的。正如你看到的那樣,表達(dá)式必須使用${ 和}包圍起來。

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

運(yùn)算符

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

1:表達(dá)式語言運(yùn)算符

運(yùn)算符

說明

+

-

*

/ 或 div

% 或 mod

模(求余)

== 或 =

等于

!= 或 !=

不等于

< 或 lt

小于

> 或 gt

大于

<= 或 le

小于等于

>= 或 ge

大于等于

&& 或 and

邏輯與

|| or or

邏輯或

! 或 not

邏輯非

empty

檢查是否為空值

a ? b : c

條件運(yùn)算符

隱含對(duì)象

除了運(yùn)算符外,表達(dá)式語言還定義了一些隱含對(duì)象以支持網(wǎng)頁作者訪問需要的應(yīng)用程序數(shù)據(jù)。表達(dá)式語言定義的隱含對(duì)象如表2所示,后面將給出使用這些隱含對(duì)象的一個(gè)例子。

2:表達(dá)式語言中的隱含對(duì)象

隱含對(duì)象

內(nèi)容

applicationscope

應(yīng)用程序范圍內(nèi)的scoped變量組成的集合

cookie

所有cookie組成的集合

header

http請(qǐng)求頭部,字符串

headervalues

http請(qǐng)求頭部,字符串集合

initparam

全部應(yīng)用程序參數(shù)名組成的集合

pagecontext

當(dāng)前頁面的javax.servlet.jsp.pagecontext對(duì)象

pagescope

頁面范圍內(nèi)所有對(duì)象的集合

param

所有請(qǐng)求參數(shù)字符串組成的集合

paramvalues

所有作為字符串集合的請(qǐng)求參數(shù)

requestscope

所有請(qǐng)求范圍的對(duì)象的集合

sessionscope

所有會(huì)話范圍的對(duì)象的集合

表達(dá)式語言的例子

如你所言,網(wǎng)頁作者無須學(xué)習(xí)java也能夠使用這種表達(dá)式語言。示例代碼1顯示了一些表達(dá)式的例子和隱含對(duì)象的使用。

代碼示例1: ex1.jsp

要運(yùn)行這個(gè)例子,請(qǐng)參照以下步驟,這里我們假定tomcat 5.0安裝在c:/tomcat5.0下。

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

你將看到類似圖1所示的畫面。使用表達(dá)式語言就這么簡(jiǎn)單!


1jsp表達(dá)式語言和隱含對(duì)象


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


填充表單例子

隱含對(duì)象可用于讀取填充表單的數(shù)據(jù)。代碼示例2給出了一個(gè)簡(jiǎn)單的表單,該表單提示用戶輸入一個(gè)名字。

代碼示例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>

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

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


2:表單處理

定義和使用函數(shù)

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

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

代碼示例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把這段代碼編譯成功后,下一步就要把函數(shù)的簽名映射到標(biāo)簽庫。代碼示例4說明了如何把a(bǔ)dd函數(shù)映射到包含函數(shù)實(shí)現(xiàn)和函數(shù)簽名的類。后面將說明把這段代碼添加到哪兒。

代碼示例4: 函數(shù)描述符

    <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>

現(xiàn)在我們就可以編寫一個(gè)jsp頁面來使用這個(gè)函數(shù)。代碼示例5是包含兩個(gè)字段的一個(gè)表單,用戶輸入兩個(gè)數(shù)字并按下“求和”按鈕,就會(huì)調(diào)用上面的函數(shù)并把兩個(gè)數(shù)相加,結(jié)果在同一個(gè)頁面中顯示出來。

代碼示例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>

要運(yùn)行這個(gè)例子:

  1. 復(fù)制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中的代碼段添加到文件中最后一個(gè)</function>標(biāo)簽之后,</taglib>標(biāo)簽之前;
  4. 復(fù)制math.jsp并保存到c:/tomcat5.0/webapps/jsp-examples/jsp2-tutorial下;
  5. 用瀏覽器打開該文件。

如果一切正常,應(yīng)該會(huì)看到類似如圖3所示的窗口。


3:使用函數(shù)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伽师县| 大同县| 新野县| 思南县| 平定县| 临桂县| 靖边县| 望谟县| 新绛县| 仪陇县| 集安市| 永安市| 鹤庆县| 秭归县| 南郑县| 易门县| 石屏县| 武宣县| 微山县| 介休市| 安康市| 台中县| 鄂州市| 墨竹工卡县| 湟源县| 西乌| 河间市| 中牟县| 宕昌县| 牙克石市| 台东县| 新竹市| 沾益县| 资中县| 梁平县| 正镶白旗| 顺昌县| 武功县| 射阳县| 民权县| 湘乡市|