<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-26  評論-13  文章-46  trackbacks-0

    JSP(JavaServer Pages)技術(shù)是對Servlet的進一步抽象,它由JCP(Java Community Process)開發(fā),是用于生成動態(tài)內(nèi)容的開放式的、可免費獲取的規(guī)范,也是J2EE(Java 2 Enterprise Edition)規(guī)范的重要組成部分。許多商業(yè)應(yīng)用服務(wù)器如BEA WebLogic、IBM WebSphere、Live Jrun和Orion都支持JSP技術(shù)。

    從機票預訂系統(tǒng)、銀行系統(tǒng)到購物系統(tǒng),Web上到處都在應(yīng)用JSP技術(shù)。新發(fā)布的2.0版是對JSP1.2的升級,增加了一些有趣的新特性。JSP2的目標是使動態(tài)網(wǎng)頁的設(shè)計更加容易,而且無需學習Java編程語言。

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

    提供具有豐富示例代碼的教程來使你熟悉JSP2.0
    介紹JSP2.0的新特性
    提供利用JSP2.0開發(fā)應(yīng)用程序的一些體會
    給出了一些示例代碼,對這些代碼稍加修改即可用于你自己的應(yīng)用程序。
    如果你還不熟悉JSP,那么直接從JSP2.0入手是一個不錯的主意。但是如果希望學習JSP1.2,也許你需要從 JSP教程 開始學習。

    JSP 2.0
    JSP 2.0是對JSP 1.2的升級,增加了幾個有趣的新特性,可以使Web應(yīng)用程序設(shè)計人員和開發(fā)人員的工作更容易一些。JSP 2.0的目標是比以前更易于使用,更重要的是無須學習Java語言本身就可以使用它。它增加了一種稱為SimpleTag的新擴展機制來簡化標簽API(Tag API)。

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

    一種簡單的表達式語言(EL),能夠用來容易地從JSP頁面訪問數(shù)據(jù),這種表達式語言簡化了基于JSP的不含腳本的應(yīng)用程序的編寫,不需要使用Java Scriptlet或者Java表達式;
    用于直接使用JSP技術(shù)來定義可重用的自定義行為的新語法,該語法使用.tag和.tagx文件,這類文件可由開發(fā)人員或者網(wǎng)頁作者編寫;
    3XML語法得到了實質(zhì)性的改進,增加了新的標準文件擴展名(.tagx用于標簽文件,.jspx用于JSP文件)。
    本文主要討論表達式語言、簡化的標簽API和標簽文件。相信目前的JSP開發(fā)人員將會發(fā)現(xiàn)這些重要的特性不但有趣,而且非常有用。

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

    JSP 2.0起步
    在著手學習JSP 2.0之前,你需要一個支持JSP2.0和Java Servlet 2.4規(guī)范的JSP環(huán)境。幸運的是,Jakarta Tomcat 5.0(alpha測試版)支持新的JSP2.0和Servlet 2.4規(guī)范,可以從http://jakarta.apache.org/builds/jakarta-tomcat/release/v5.0.4-alpha/下載并安裝 Tomcat 5.0 。

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

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

    <someTags:aTag attribute="<%= pageContext.getAttribute("aName") %>">

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

    <%= aCustomer.getAddress().getCountry() %>

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

    <someTags:aTag attribute="${aName}">

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

    ${aCustomer.address.country}

    你可能會問,這不是JavaScript的語法嗎?完全正確!如果你使用過JavaScript,就會感到非常輕松,因為表達式語言正是借用了訪問結(jié)構(gòu)化數(shù)據(jù)的JavaScript語法。

    注意: 表達式語言最初是作為JSP標準標簽庫(JSTL)1.0的一部分而開發(fā)的,JSTL是一種標準標簽庫,它提供對通用的、結(jié)構(gòu)化的任務(wù)的支持,如迭代和條件、XML文檔處理、國際化和利用SQL訪問數(shù)據(jù)庫等。JSTL規(guī)范是由JSR 52專家組開發(fā)的。關(guān)于JSTL的介紹,請參見 Faster Development with JSTL (使用JSTL加速開發(fā)).

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

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

    點號運算符用于訪問命名的屬性,比如表達式${customer.name}表示scoped變量customer的name屬性;
    方括號運算符可用于檢索命名的屬性,比如在${customer[“name”]}中。也可以通過${customers[0]}的形式來訪問集合customers中的第一項。
    表達式語言統(tǒng)一了對點號和方括號運算符的處理,因此${customer.name}與${customer[“name”]}是等價的。正如你看到的那樣,表達式必須使用${和}包圍起來。

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

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

    表 1 :表達式語言運算符
     
    運算符
     說明
     
    +
     加
     
    -
     減
     
    *
     乘
     
    / 或 div
     除
     
    % 或 mod
     模(求余)
     
    == 或 =
     等于
     
    != 或 !=
     不等于
     
    < 或 lt
     小于
     
    > 或 gt
     大于
     
    <= 或 le
     小于等于
     
    >= 或 ge
     大于等于
     
    && 或 and
     邏輯與
     
    || or or
     邏輯或
     
    ! 或 not
     邏輯非
     
    empty
     檢查是否為空值
     
    a ? b : c
     條件運算符
     

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

    表 2 :表達式語言中的隱含對象
     
    隱含對象
     內(nèi)容
     
    applicationScope
     應(yīng)用程序范圍內(nèi)的scoped變量組成的集合
     
    cookie
     所有cookie組成的集合
     
    header
     HTTP請求頭部,字符串
     
    headerValues
     HTTP請求頭部,字符串集合
     
    initParam
     全部應(yīng)用程序參數(shù)名組成的集合
     
    pageContext
     當前頁面的javax.servlet.jsp.PageContext對象
     
    pageScope
     頁面范圍內(nèi)所有對象的集合
     
    param
     所有請求參數(shù)字符串組成的集合
     
    paramValues
     所有作為字符串集合的請求參數(shù)
     
    requestScope
     所有請求范圍的對象的集合
     
    sessionScope
     所有會話范圍的對象的集合
     

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

    代碼示例1 : ex1.jsp

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

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


    圖 1 : JSP 表達式語言和隱含對象

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

    填充表單例子
    隱含對象$paran[var]可用于讀取填充表單的數(shù)據(jù)。代碼示例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 :表單處理

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

    為了說明函數(shù)的使用,我們舉一個簡單的例子,把兩個數(shù)相加。首先要編寫求兩數(shù)之和的Java方法代碼,如代碼示例3所示,這里定義了一個靜態(tài)方法,它接收兩個字符串參數(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ù)的簽名映射到標簽庫。代碼示例4說明了如何把add函數(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)在我們就可以編寫一個JSP頁面來使用這個函數(shù)。代碼示例5是包含兩個字段的一個表單,用戶輸入兩個數(shù)字并按下“求和”按鈕,就會調(diào)用上面的函數(shù)并把兩個數(shù)相加,結(jié)果在同一個頁面中顯示出來。

    代碼示例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>
    要運行這個例子:

    復制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中的代碼段添加到文件中最后一個</function>標簽之后,</taglib>標簽之前;
    復制math.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下;
    用瀏覽器打開該文件。
    如果一切正常,應(yīng)該會看到類似如圖3所示的窗口。


    圖 3 :使用函數(shù)

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

    Java開發(fā)人員可以定義實現(xiàn)接口javax.servlet.jsp.tagext.SimpleTag的類;
    不懂Java的網(wǎng)頁編寫人員則可以使用標簽文件。
    首先來看第一種方式,代碼示例6給出了一個簡單的標簽處理器,它的作用僅僅是打印“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中定義一個標簽描述符,下面是標簽描述符的例子。

    代碼示例7 : 標簽描述符

    <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>
    最后再編寫一個使用上述標簽的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>
    要運行這個例子:

    復制HelloTg.java并保存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\simpletag下;
    使用javac編譯HelloTag.java;
    把代碼示例7中的標簽描述符添加到文件C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld中的</taglib>之前;
    復制helloworld.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial目錄中;
    用瀏覽器打開helloworld.jsp。
    如果一切正常,應(yīng)該會看到類似如圖4所示的畫面。


    圖 4 :簡單標簽處理器

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

    為說明使用標簽文件是多么容易,考慮一下代碼示例9。沒錯,這就是一個標簽文件!

    代碼示例9 : greetings.tag

    Hello there. How are you doing?
    一旦定義了標簽文件,就可以在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>
    要運行這個例子:

    復制標簽文件greetings.tags并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tags 目錄下;
    復制JSP網(wǎng)頁文件char.jsp并保存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial 目錄下;
    用瀏覽器打開chat.jsp文件。
    如果一切正常,應(yīng)該會看到類似如圖5所示的窗口。

    圖 5 :簡單的標簽文件

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

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

    代碼示例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給出了使用上述標簽的一個簡單的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>
    要運行這個例子:

    復制文件display.tag并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tag 下;
    復制文件newsportal.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下;
    用瀏覽器打開newsportal文件。
    結(jié)果應(yīng)該會得到與圖6類似的畫面。


    圖 6 :把標簽文件用作模板

    結(jié)論
    JSP 2.0使得快速開發(fā)和維護動態(tài)網(wǎng)頁比以前更加容易,盡管“Java”一詞出現(xiàn)在JSP中,但使用JSP2.0,網(wǎng)頁作者無須學習Java程序語言本身,就能開發(fā)出全新的動態(tài)網(wǎng)頁。本文中的例子說明了使用JSP2.0的新特性開發(fā)動態(tài)網(wǎng)頁是多么容易。

    更多信息
    Fast Track JSP 1.2
    JavaServer Pages Technology
    JavaServer Pages Specification (JSR 152)
    The Tomcat 5 Servlet/JSP Container
    JSP Developers Forum
    JavaServer Pages Standard Tag Library (JSTL)
      

    posted on 2005-06-07 16:18 似水流年 閱讀(442) 評論(0)  編輯  收藏 所屬分類: JSP/Servlet
    主站蜘蛛池模板: 久久亚洲国产成人亚| 亚洲中文字幕无码中文| 久久国产乱子伦精品免费一| 久久91亚洲人成电影网站| 69视频在线是免费观看| 日本亚洲欧美色视频在线播放 | 国产午夜亚洲精品| 亚洲一级特黄大片在线观看| 99久久精品国产免费| 妇女自拍偷自拍亚洲精品| 亚洲国产精品无码中文字| 国产免费看JIZZ视频| 久久www免费人成看国产片| 亚洲国产成人久久精品app| 国产成人99久久亚洲综合精品| 最近免费中文字幕大全免费版视频 | 亚洲性无码av在线| 亚洲国产精品无码久久青草| 在免费jizzjizz在线播| 一区二区三区视频免费| 亚洲无吗在线视频| 亚洲AV无码专区在线播放中文| 免费精品一区二区三区在线观看| a级在线免费观看| 青娱乐在线免费观看视频| 亚洲国产电影在线观看| 国产aⅴ无码专区亚洲av| 亚洲?V乱码久久精品蜜桃| 免费看男女下面日出水来| 青青操免费在线观看| 美女羞羞视频免费网站| 亚洲视频在线观看2018| 亚洲V无码一区二区三区四区观看| 日本人的色道www免费一区| 无码av免费毛片一区二区| 免费成人高清在线视频| 一级成人a免费视频| 美女羞羞喷液视频免费| 亚洲AV永久无码精品一福利| 亚洲中文无码线在线观看| 亚洲人成网www|