解決之道

          個(gè)人日記
          posts - 33, comments - 1, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          JSP(JavaServer Pages)技術(shù)是對(duì)Servlet的進(jìn)一步抽象,它由JCP(Java Community Process)開(kāi)發(fā),是用于生成動(dòng)態(tài)內(nèi)容的開(kā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)到購(gòu)物系統(tǒng),Web上到處都在應(yīng)用JSP技術(shù)。新發(fā)布的2.0版是對(duì)JSP1.2的升級(jí),增加了一些有趣的新特性。JSP2的目標(biāo)是使動(dòng)態(tài)網(wǎng)頁(yè)的設(shè)計(jì)更加容易,而且無(wú)需學(xué)習(xí)Java編程語(yǔ)言。

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

            提供具有豐富示例代碼的教程來(lái)使你熟悉JSP2.0

            介紹JSP2.0的新特性

            提供利用JSP2.0開(kāi)發(fā)應(yīng)用程序的一些體會(huì)給出了一些示例代碼,對(duì)這些代碼稍加修改即可用于你自己的應(yīng)用程序。

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

            JSP 2.0

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

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

            一種簡(jiǎn)單的表達(dá)式語(yǔ)言(EL),能夠用來(lái)容易地從JSP頁(yè)面訪問(wèn)數(shù)據(jù),這種表達(dá)式語(yǔ)言簡(jiǎn)化了基于JSP的不含腳本的應(yīng)用程序的編寫,不需要使用Java Scriptlet或者Java表達(dá)式;

            用于直接使用JSP技術(shù)來(lái)定義可重用的自定義行為的新語(yǔ)法,該語(yǔ)法使用.tag和.tagx文件,這類文件可由開(kāi)發(fā)人員或者網(wǎng)頁(yè)作者編寫;
          3XML語(yǔ)法得到了實(shí)質(zhì)性的改進(jìn),增加了新的標(biāo)準(zhǔn)文件擴(kuò)展名(.tagx用于標(biāo)簽文件,.jspx用于JSP文件)。

            本文主要討論表達(dá)式語(yǔ)言、簡(jiǎn)化的標(biāo)簽API和標(biāo)簽文件。相信目前的JSP開(kāi)發(fā)人員將會(huì)發(fā)現(xiàn)這些重要的特性不但有趣,而且非常有用。 為何要從1.2跨越到2.0?

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

            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á)式語(yǔ)言

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

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

          <someTags:aTag attribute="<%= pageContext.getAttribute("aName") %>">
            或者使用自定義JavaBeans組件的值:

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

          <someTags:aTag attribute="${ aName}">
            而訪問(wèn)嵌套的JavaBeans屬性,則可以像下面這樣寫:

          ${ aCustomer.address.country}


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

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

            注意:

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

          ? ? ? ? ??

          【字體:大 小】【報(bào)告錯(cuò)誤】【進(jìn)入軟件交流區(qū)】【關(guān)閉】

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

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

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

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

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

            EL的標(biāo)識(shí)符求值方式是使用PageContext.findAttribute(String),把標(biāo)識(shí)符作為一個(gè)屬性來(lái)查找它的值。如果沒(méi)有找到該屬性,則返回null。

            運(yùn)算符

            表達(dá)式語(yǔ)言支持算術(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è)集合或字符串是否為空。比方說(shuō),只有當(dāng)要求的命名參數(shù)param沒(méi)有給出時(shí),表達(dá)式${ empty param.name}才返回真。Empty運(yùn)算符可以與“!”運(yùn)算符一起使用,比如${ !empty param.name}當(dāng)要求的命名參數(shù)param存在時(shí)返回真。

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


          運(yùn)算符
          說(shuō)明
          +-*/ 或 div% 或 mod模(求余)== 或 =等于!= 或 !=不等于< 或 lt小于> 或 gt大于<= 或 le小于等于>= 或 ge大于等于&& 或 and邏輯與|| or or邏輯或! 或 not邏輯非empty檢查是否為空值a ? b : c條件運(yùn)算符

            隱含對(duì)象

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

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

          隱含對(duì)象
          內(nèi)容
          applicationScope應(yīng)用程序范圍內(nèi)的scoped變量組成的集合cookie所有cookie組成的集合headerHTTP請(qǐng)求頭部,字符串headerValuesHTTP請(qǐng)求頭部,字符串集合initParam全部應(yīng)用程序參數(shù)名組成的集合pageContext當(dāng)前頁(yè)面的javax.servlet.jsp.PageContext對(duì)象pageScope頁(yè)面范圍內(nèi)所有對(duì)象的集合param所有請(qǐng)求參數(shù)字符串組成的集合paramValues所有作為字符串集合的請(qǐng)求參數(shù)requestScope所有請(qǐng)求范圍的對(duì)象的集合sessionScope所有會(huì)話范圍的對(duì)象的集合
            表達(dá)式語(yǔ)言的例子

            如你所言,網(wǎng)頁(yè)作者無(wú)須學(xué)習(xí)Java也能夠使用這種表達(dá)式語(yǔ)言。示例代碼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ù)器:指向“開(kāi)始”->“程序”->“Apache Tomcat 5.0”,單擊“Apache Tomcat 5.0”來(lái)啟動(dòng)Tomcat在瀏覽器中輸入http://localhost:8080/jsp-examples/jsp2-tutorial/ex1.jsp你將看到類似圖1所示的畫面。使用表達(dá)式語(yǔ)言就這么簡(jiǎn)單!


          圖1:JSP表達(dá)式語(yǔ)言和隱含對(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ì)顯示同一頁(yè)面中的“The Name is:”字樣后面,如圖2所示。

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


          圖2:表單處理

          ???? ? ? ??

          【字體:大 小】【報(bào)告錯(cuò)誤】【進(jìn)入軟件交流區(qū)】【關(guān)閉】

          定義和使用函數(shù)

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

            為了說(shuō)明函數(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)簽庫(kù)。代碼示例4說(shuō)明了如何把a(bǔ)dd函數(shù)映射到包含函數(shù)實(shí)現(xiàn)和函數(shù)簽名的類。后面將說(shuō)明把這段代碼添加到哪兒。

            代碼示例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頁(yè)面來(lái)使用這個(gè)函數(shù)。代碼示例5是包含兩個(gè)字段的一個(gè)表單,用戶輸入兩個(gè)數(shù)字并按下“求和”按鈕,就會(huì)調(diào)用上面的函數(shù)并把兩個(gè)數(shù)相加,結(jié)果在同一個(gè)頁(yè)面中顯示出來(lái)。

            代碼示例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è)例子:

            復(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下;用瀏覽器打開(kāi)該文件。

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


          圖3:使用函數(shù)

            標(biāo)簽處理器

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

            Java開(kāi)發(fā)人員可以定義實(shí)現(xiàn)接口javax.servlet.jsp.tagext.SimpleTag的類; 不懂Java的網(wǎng)頁(yè)編寫人員則可以使用標(biāo)簽文件。

            首先來(lái)看第一種方式,代碼示例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頁(yè)面文件,見(jiàn)代碼示例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目錄中;用瀏覽器打開(kāi)helloworld.jsp。

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


          圖4:簡(jiǎn)單標(biāo)簽處理器



          標(biāo)簽文件

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

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

            代碼示例9: greetings.tag

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

            代碼示例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)頁(yè)文件char.jsp并保存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial 目錄下;用瀏覽器打開(kāi)chat.jsp文件。

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


          圖5:簡(jiǎn)單的標(biāo)簽文件

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

            注意: 重要的是要注意到這里沒(méi)有為問(wèn)候標(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頁(yè)面。

            代碼示例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下;用瀏覽器打開(kāi)newsportal文件。

            結(jié)果應(yīng)該會(huì)得到與圖6類似的畫面。


          圖6:把標(biāo)簽文件用作模板

            結(jié)論

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



          文章來(lái)源:http://www.aygfsteel.com/zhangrenquan/articles/85776.html

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南康市| 顺昌县| 肇庆市| 乌兰浩特市| 泾阳县| 靖边县| 遵义县| 大宁县| 滕州市| 尼玛县| 宣武区| 北宁市| 安达市| 耒阳市| 定安县| 井研县| 恩施市| 钦州市| 双桥区| 罗田县| 定结县| 罗江县| 昌邑市| 大化| 区。| 方城县| 开封县| 吉木乃县| 聂荣县| 日土县| 全椒县| 麻江县| 正镶白旗| 潞西市| 任丘市| 灵台县| 阿城市| 大余县| 江门市| 峨眉山市| 临夏市|