成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當(dāng)前位置:首頁>>軟件教程>>新聞內(nèi)容  
用JSP 2.0開發(fā)Web應(yīng)用程序
作者:Qusay H. Mahmoud 發(fā)布時(shí)間:2003-10-19 16:22:44 | 【字體:
摘要: 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.XML語法得到了實(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語法。 

訪問應(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下。

切換目錄到 c:\Tomcat5.0\webapps\jsp-examples 
創(chuàng)建新目錄,名字可以是任意的,比如jsp2-tutorial 
切換到j(luò)sp2-tutorial 
把ex1.jsp復(fù)制并保存到該目錄下 
啟動(dòng)Tomcat 5服務(wù)器:指向“開始”->“程序”->“Apache Tomcat 5.0”,單擊“Apache Tomcat 5.0”來啟動(dòng)Tomcat 
在瀏覽器中輸入http://localhost:8080/jsp-examples/jsp2-tutorial/ex1.jsp 
你將看到類似圖1所示的畫面。使用表達(dá)式語言就這么簡(jiǎn)單! 

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


--------------------------------------------------------------------------------

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

代碼示例2: form.jsp 

[code]<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>[/code]

定義和使用函數(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 

[code]<%@ 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>[/code]

要運(yùn)行這個(gè)例子:
復(fù)制Compute.java并保存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\el下; 

使用javac編譯Compute.java; 
編輯文件C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld,把代碼示例4中的代碼段添加到文件中最后一個(gè)</function>標(biāo)簽之后,</taglib>標(biāo)簽之前; 
復(fù)制math.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下; 
用瀏覽器打開該文件。 

標(biāo)簽處理器
    JSP 1.2中傳統(tǒng)的標(biāo)簽處理API由于允許標(biāo)簽體中包含scriptlet而變得復(fù)雜,但是現(xiàn)在利用表達(dá)式語言可以編寫不含scriptlet的JSP網(wǎng)頁。最終,JSP 2.0引入了一種新的標(biāo)簽擴(kuò)展機(jī)制,稱為“簡(jiǎn)單標(biāo)簽擴(kuò)展”,這種機(jī)制有兩種使用方式:

    Java開發(fā)人員可以定義實(shí)現(xiàn)接口javax.servlet.jsp.tagext.SimpleTag的類; 不懂Java的網(wǎng)頁編寫人員則可以使用標(biāo)簽文件。 
首先來看第一種方式,代碼示例6給出了一個(gè)簡(jiǎn)單的標(biāo)簽處理器,它的作用僅僅是打印“This is my first tag! ”。

代碼示例6: HelloTag.java 

package jsp2.examples.simpletag;
import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
/**  * SimpleTag handler that prints "This is my first tag!"  */  public class HelloTag extends SimpleTagSupport {   
     public void doTag() throws JspException, IOException   {           getJspContext().getOut().write("This is my first tag!");     
   }
   }


    編譯成功后,下一步就要在TLD中定義一個(gè)標(biāo)簽描述符,下面是標(biāo)簽描述符的例子。 

代碼示例7: 標(biāo)簽描述符 

    
<tag> 
       <description>Prints this is my first tag</description>        
         <name>hello</name>
        <tag-class>jsp2.examples.simpletag.HelloTag</tag-class>
        <body-content>empty</body-content>   
          </tag>


最后再編寫一個(gè)使用上述標(biāo)簽的JSP頁面文件,見代碼示例8。 

代碼示例8: helloworld.jsp 

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %><HTML><HEAD><TITLE>Simple Tag Handler</TITLE></HEAD>
<BODY><H2>Simple Tag Handler</H2><P><B>My first tag prints</B>: <mytag:hello/></BODY></HTML>



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

復(fù)制HelloTg.java并保存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\simpletag下; 
使用javac編譯HelloTag.java; 
把代碼示例7中的標(biāo)簽描述符添加到文件C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld中的</taglib>之前; 
復(fù)制helloworld.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial目錄中; 
用瀏覽器打開helloworld.jsp。 

標(biāo)簽文件
    使用簡(jiǎn)單標(biāo)簽擴(kuò)展機(jī)制的另一種方法是通過標(biāo)簽文件。標(biāo)簽文件是一種資源文件,網(wǎng)頁作者可以利用它抽取一段JSP代碼,通過定制功能來實(shí)現(xiàn)代碼的復(fù)用。換句話說,標(biāo)簽文件允許JSP網(wǎng)頁作者使用JSP語法創(chuàng)建可復(fù)用的標(biāo)簽庫。標(biāo)簽文件的擴(kuò)展名必須是“.tag”。

    為說明使用標(biāo)簽文件是多么容易,考慮一下代碼示例9。沒錯(cuò),這就是一個(gè)標(biāo)簽文件!

代碼示例9: greetings.tag 

Hello there. How are you doing?
一旦定義了標(biāo)簽文件,就可以在JSP網(wǎng)頁的編寫中使用這種定制的功能。比如代碼示例10中的JSP網(wǎng)頁。

代碼示例10: chat.jsp 

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %><HTML><HEAD><TITLE>JSP 2.0 Examples - Hello World Using a Tag File</TITLE></HEAD><BODY><H2>Tag File Example</H2><P><B>The output of my first tag file is</B>: <tags:greetings/></BODY></HTML>



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

復(fù)制標(biāo)簽文件greetings.tags并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tags 目錄下; 
復(fù)制JSP網(wǎng)頁文件char.jsp并保存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial 目錄下; 
用瀏覽器打開chat.jsp文件。 

注意: 重要的是要注意到這里沒有為問候標(biāo)簽編寫TLD,而是創(chuàng)建了一個(gè)標(biāo)簽文件并放在特殊的目錄中,然后用taglib指令導(dǎo)入并直接使用它。


--------------------------------------------------------------------------------

另一個(gè)標(biāo)簽文件的例子
    標(biāo)簽文件可以作為模板使用。考慮代碼示例11中的標(biāo)簽文件display.tag,這個(gè)例子是根據(jù)Tomcat 5.0中的面板的例子改寫的。指令attribute類似于TLD中的<attribute>元素,允許聲明自定義的動(dòng)作屬性。

代碼示例11: display.tag 

<%@ attribute name="color" %><%@ attribute name="bgcolor" %><%@ attribute name="title" %><TABLE border="0" bgcolor="${color}">
    <TR>         <TD><B>${title}</B></TD>     </TR>    <TR>        <TD bgcolor="${bgcolor}">            <jsp:doBody/>        </TD>    </TR></TABLE>



代碼示例12給出了使用上述標(biāo)簽的一個(gè)簡(jiǎn)單的JSP頁面。

代碼示例12: newsportal.jsp 



<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %><HTML><HEAD><TITLE>Another Tag File Example</TITLE></HEAD><BODY><H2>News Portal: Another Tag File Example</H2>          <TABLE border="0">
                <TR valign="top">                    <TD>                        <tags:display color="#ff0000" bgcolor="#ffc0c0"                                title="Travel">                           Last French Concorde Arrives in NY<br/>                           Another Travel Headline<br/>                           Yet Another Travel Headline<br/>                        </tags:display>                    </TD>                    <TD>                        <tags:display color="#00fc00" bgcolor="#c0ffc0"                                title="Technology">                            Java for in-flight entertainment<BR>                            Another Technology Headline<BR>                            Another Technology Headline<BR>                        </tags:display>                    </TD>                    <TD>                        <tags:display color="#ffcc11" bgcolor="#ffffcc"                                title="Sports">                            American Football<BR/>                            NBA<BR/>                            Soccer<BR/>                        </tags:display>                    </TD>                 </TR>            </TABLE>        </BODY>    </HTML>



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

復(fù)制文件display.tag并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tag 下; 
復(fù)制文件newsportal.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下; 
用瀏覽器打開newsportal文件。 

結(jié)論
    JSP 2.0使得快速開發(fā)和維護(hù)動(dòng)態(tài)網(wǎng)頁比以前更加容易,盡管“Java”一詞出現(xiàn)在JSP中,但使用JSP2.0,網(wǎng)頁作者無須學(xué)習(xí)Java程序語言本身,就能開發(fā)出全新的動(dòng)態(tài)網(wǎng)頁。本文中的例子說明了使用JSP2.0的新特性開發(fā)動(dòng)態(tài)網(wǎng)頁是多么容易。
文章來源:Matrix-與Java共舞
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時(shí)代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動(dòng)天感動(dòng)地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個(gè)錯(cuò)
 最后一次的溫柔
 愛上你是我的錯(cuò)
 怎么會(huì)狠心傷害我
 不是因?yàn)榧拍畔?/a>
 親愛的那不是愛情
 難道愛一個(gè)人有錯(cuò)
 寂寞的時(shí)候說愛我
主站蜘蛛池模板: 怀柔区| 东丰县| 恭城| 泰来县| 色达县| 霍城县| 宣威市| 长宁县| 射洪县| 盐边县| 炉霍县| 南充市| 科技| 邢台县| 巧家县| 出国| 同心县| 化隆| 神木县| 新泰市| 博野县| 汾西县| 湘潭市| 舞钢市| 凤翔县| 辉县市| 西畴县| 彭州市| 诏安县| 永安市| 那曲县| 汽车| 台前县| 平遥县| 秀山| 宜宾市| 花莲县| 桓仁| 青海省| 兖州市| 清水县|