金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上

 找回密碼
 注冊

QQ登錄

只需一步,快速開(kāi)始

查看: 3177|回復: 1
打印 上一主題 下一主題

JSP入門(mén)教程

跳轉到指定樓層
1#
firstcosmos  | 發(fā)表于 2005-12-15 18:34:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 來(lái)自 中國四川成都

馬上注冊,結交更多好友,享用更多功能。

您需要 登錄 才可以下載或查看,沒(méi)有帳號?注冊

x
<>JSP入門(mén)教程(1) </P>
<> <BR> <BR>    JavaServer Pages (JSP)是基于Java的技術(shù),用于創(chuàng )建可支持跨平臺及跨Web服務(wù)器的動(dòng)態(tài)網(wǎng)頁(yè)。 </P>
<>JSP可與微軟的Active Server Pages (ASP)相媲美,但JSP使用的是類(lèi)似于HTML的標記和Java 代碼片段而不是用VBScript。當你使用不提供ASP本地支持的Web服務(wù)器(例如 Apache或Netscape服務(wù)器)時(shí),你就可以考慮使用JSP了。你雖然也可以為這些服務(wù)器弄一個(gè)ASP附加軟件模塊,但是太昂貴了,F在Sun公司并不會(huì )因你使用JSP向你收費(雖然將來(lái)可能要收),況且用于Solaris、 Linux以及Windows系統的組件都很容易獲得。 </P>
<P>不要把JSP與服務(wù)器端的JavaScript語(yǔ)言搞混了。Web服務(wù)器自動(dòng)將通過(guò)JSP生成的Java代碼片段轉換成Java 片段(servlets)。 JSP也可自動(dòng)控制許多功能,如過(guò)去用Perl腳本編寫(xiě)功能程序或像ASP這樣的服務(wù)器專(zhuān)用API(應用編程接口)。 </P>
<P>我們馬上就要開(kāi)始幫助你建立一個(gè)使用JSP 技術(shù)的網(wǎng)站范例了。 </P>
<P><BR>準備好計算機以使用JSP </P>
<P>你需要Java2軟件開(kāi)發(fā)工具箱(J2SDK),過(guò)去稱(chēng)之為Java開(kāi)發(fā)工具箱(JDK)、JavaServer 網(wǎng)絡(luò )開(kāi)發(fā)工具箱(JSWDK)、Tomcat,或者其它能支持JSP的Web服務(wù)器。升陽(yáng)公司為Windows、Solaris以及 Linux平臺提供免費的J2SDK和JSWDK。 </P>
<P>如果你想在現有的Web服務(wù)器上使用JSP,而此服務(wù)器本身不支持JSP和Java 代碼片段,可以試用Allaire公司的Jrun。它可以為Netscape的Enterprise Server和Fasttrack Server、微軟的Internet Information Server(IIS)和Personal Web Server(PWS)、Apache以及其他服務(wù)器充當Web服務(wù)器附件。你也可以使用Apache服務(wù)器的Java版,其中包含最新的JSWDK。 </P>
<P>下載并安裝所需的軟件 <BR>目前,版本號為1.2.2-001的J2SDK可下載版以可安裝的歸檔文件形式出現。這個(gè)大約20MB的下載量軟件可提供一個(gè)徹底的Java開(kāi)發(fā)環(huán)境,讓你創(chuàng )造任何基于Java并且利用了而標準核心API的解決方案。其實(shí),你的Web服務(wù)器使用JSP的唯一條件是要有Java編輯器。要讓W(xué)eb服務(wù)器知道編輯器的位置,需要JAVA_HOME 環(huán)境變量設置為J2SDK安裝目錄。如果你已經(jīng)在Windows系統中進(jìn)行了安裝并且接受了默認目錄, 請將“set JAVA_HOME=C:1.2.2”添加到你的“autoexec.bat”文件中,然后重新啟動(dòng)。 </P>
<P>安裝J2SDK后,下載并安裝JSWDK或者是Tomcat β版,即基于Java的Apache Web服務(wù)器的β版。你把JSWDK放在什么地方是無(wú)關(guān)緊要的,只要你以后能找到它就行。通常,將其放在頂層目錄中,這樣你在替換JSWDK或JSDK時(shí)無(wú)需刪除另一個(gè)軟件。安裝好這個(gè)文件后,準備工作已經(jīng)就緒,你可以開(kāi)始JSP開(kāi)發(fā)工作了。 </P>
<P>正確地安裝JSWDK后,請運行“startserver”腳本程序,以啟動(dòng)Web服務(wù)器,使其按照默認情況監聽(tīng)8080端口。你要在啟動(dòng)服務(wù)器之后查看您是否已正確地安裝了此工具,請加載一個(gè)JSP樣本文件(<a href="http://locahost:8080/examples/jsp/" target="_blank" >http://locahost:8080/examples/jsp/</A>)。如果你能成功地運行這些樣本文件,說(shuō)明你已經(jīng)正確地安裝了這個(gè)軟件。如果你在用來(lái)啟動(dòng)服務(wù)器的控制臺窗口中看到報錯信息,你就需要做些修改。最經(jīng)常發(fā)生的問(wèn)題是沒(méi)有設置或不正確地設置了JAVA_HOME環(huán)境變量。要看到當前環(huán)境變量設置情況,要請在DOS提示符下鍵入“set”設置。 </P>
<P>開(kāi)始 <BR>在解釋 JSP語(yǔ)法前,創(chuàng )建一個(gè)快捷網(wǎng)頁(yè),顯示目當前的日期和時(shí)間,并然后將之其保存為sample.jsp: </P>
<P>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;First Page&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; <BR>&lt;H3&gt;Today is: <BR>&lt;%= new java.util.Date() %&gt; <BR>&lt;/H3&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt;. </P>
<P>把這個(gè)文件以及你所有的HTML 和 JSP 頁(yè)面放在JSWDK安裝目錄下的網(wǎng)頁(yè)目錄里。你可以從<a href="http://localhost:8080/sample.jsp" target="_blank" >http://localhost:8080/sample.jsp</A>加載此網(wǎng)頁(yè)。該網(wǎng)頁(yè)首次被訪(fǎng)問(wèn)時(shí),Web服務(wù)器會(huì )把JSP編譯成Java代碼片段,這樣你就能夠看到當前的日期和時(shí)間了。 </P>
<P>你已經(jīng)下載、安裝并配置好了開(kāi)發(fā)環(huán)境,你可以開(kāi)始學(xué)習JSP語(yǔ)法并創(chuàng )建自己的基于JSP的解決方案了。 </P>
<P>JSP基本語(yǔ)法 <BR>講完安裝問(wèn)題后,現在進(jìn)入來(lái)討論JSP語(yǔ)法。一個(gè)投機取巧的辦法是下載語(yǔ)法卡片。如果你不熟悉Java編程,也許你想看一下Sun的指南 。然而網(wǎng)頁(yè)創(chuàng )建者并不需要進(jìn)行太多的Java開(kāi)發(fā)。除了一些方法調用,在你的JSP網(wǎng)頁(yè)里應盡可能少用Java代碼。 </P>
<P>記住以上提示,我們首先來(lái)看一看JSP指令和腳本元素,之后我們會(huì )解釋JavaBeans和隱含對象。共有五種JSP指令和腳本元素。在JSP 1.0版中,大部分JSP被一個(gè)以“&lt;%” 開(kāi)頭和以“%&gt;”結尾的的標記括在其中。在更新的JSP 1.1規范出臺后,就有了與XML兼容的版本。 </P>
<P>JSP指令和腳本元素 <BR>Directives &lt;%@ directive %&gt; <BR>Declarations &lt;%! declaration %&gt; <BR>Expressions &lt;%= expression %&gt; <BR>Code Fragment/Scriptlet &lt;% code fragment %&gt; <BR>Comments &lt;%-- comment --%&gt; </P>

<P>指令 <BR>JSP指令是為JSP引擎而設計的。他們并不直接產(chǎn)生任何可見(jiàn)輸出,而只是告訴引擎如何處理其余JSP頁(yè)面。這些指令始終被括在 “&lt;%@ ?%&gt;”標記中。兩個(gè)最重要的指令是“pagePage”和“Include”!癟aglib”指令不在討論之列,但是在用JSP1.1創(chuàng )建自定義標記可以使用它。 </P>
<P>幾乎在所有JSP頁(yè)面頂部都會(huì )看到“Page”指令。盡管不是必須的,但它可以讓你指定: <BR>到何處查找起支持作用的Java類(lèi)別: <BR>&lt;%@ page import="java.util.Date" %&gt;, </P>
<P>出現Java運行問(wèn)題時(shí),將網(wǎng)上沖浪者引向何處: <BR>&lt;%@ page errorPage="errorPage.jsp" %&gt;, </P>

<P>還有你是否需要管理用戶(hù)的會(huì )話(huà)級信息,這些信息可能來(lái)自多個(gè)網(wǎng)頁(yè)(在下面的JavaBeans一節將對此做進(jìn)一步講)述: <BR>&lt;%@ page session="true" %&gt;. </P>

<P>“Include”指令可以把你的內容分成更多可管理的元素,比如包括一個(gè)普通頁(yè)面頁(yè)眉或頁(yè)腳的元素。包含的網(wǎng)頁(yè)可以是一個(gè)固定的HTML 頁(yè)面或更多的JSP內容: <BR>&lt;%@ include file="200453092147.htm.jsp" %&gt; </P>
<P>聲明 <BR>JSP聲明用來(lái)讓你定義頁(yè)面級變量,以保存信息或定義JSP頁(yè)面的其余部分可能需要的支持方法。如果你發(fā)現代碼太多,通常最好把它們寫(xiě)成一個(gè)獨立的Java類(lèi)別。聲明一般都在“&lt;%! ?%&gt;”標記中。一定要以分號(;)結束變量聲明,因為任何內容都必須是有效的Java語(yǔ)句: <BR>&lt;%! int i=0; %&gt;。 </P>
<P>表達式 <BR>有了JSP表達式,表達式評估結果會(huì )被轉換成一個(gè)字符串,并且被直接包括在輸出頁(yè)面之內。JSP 表達式包含在“&lt;%= ?%&gt;” 標記中,沒(méi)有分號,除非在加引號的字符串部分使用分號。 </P>
<P><BR>&lt;%= i %&gt; <BR>&lt;%= "Hello" %&gt; . </P>
<P>代碼片段/腳本片段 <BR>代碼片段/腳本片段(Scriptlets) JSP代碼片段或腳本片段是嵌在“&lt;% ?%&gt;”標記中的。這種Java代碼在Web服務(wù)器響應請求時(shí)就會(huì )運行。在腳本片段周?chē)赡苁窃嫉腍TML或XML語(yǔ)句,在這些地方,代碼片段可以使你創(chuàng )建條件執行代碼,或要用到另外一段代碼的代碼。例如,以下的代碼組合使用表達式和代碼片段,顯示H1、H2、H3和H4標記中的字符串“Hello”。代碼片段并不局限于一行源代碼: </P>
<P>&lt;% for (int i=1; i&lt;=4; i++) { %&gt; <BR>&lt;H&lt;%=i%&gt;&gt;Hello&lt;/H&lt;%=i%&gt;&gt; <BR>&lt;% } %&gt;. </P>
<P>注釋 <BR>最后一個(gè)主要的JSP元素是嵌入式注釋。盡管你始終可以在文件中加入HTML注釋?zhuān)脩?hù)在查看頁(yè)面源代碼時(shí)會(huì )看到這些注釋。如果你不想讓用戶(hù)看到它,你就應該將其嵌入“&lt;%-- ?--%&gt;” 標記中: </P>
<P>&lt;%-- comment for server side only --%&gt;. </P>
<P>帶JavaBean 的JSP <BR>雖然你可以把大段的代碼放在腳本片段(scriptlet)內,但是絕大多數的Java代碼屬于可重復使用的名為JavaBea的組件。JavaBean類(lèi)似于A(yíng)ctiveX控件:他們都能提供常用功能并且可以重復使用。 </P>
<P>JavaBean的值是通過(guò)一些屬性獲得的,你可通過(guò)這些屬性訪(fǎng)問(wèn)JavaBean設置。以一個(gè)人來(lái)打比方,這個(gè)人就是一個(gè)JavaBean,這個(gè)人的名字、身份證號碼以及住址就是其屬性。在JSP網(wǎng)站,你基本上就是通過(guò)玩“Connect the beans)”來(lái)使你的網(wǎng)站動(dòng)態(tài)化。 </P>
<P>假設JavaBean先于網(wǎng)站被創(chuàng )建出來(lái),你需要做的第一件事就是告訴JSP頁(yè)面它將要用到一個(gè)“Bean”。你可以用“&lt;jsp:useBean&gt;”標記來(lái)做到這一點(diǎn): <BR>&lt;jsp:useBean id="localName" class="com.jguru.Person" scope="application" /&gt;。 </P>
<P>“&lt;jsp:useBean&gt;”標記要求你用“id”屬性來(lái)識鑒別Bean。這里你提供一個(gè)名字來(lái)JSP頁(yè)面其余部分的Bean。除了“id”屬性,你還須告訴網(wǎng)頁(yè)面從何處查找Bean,或者它的Java類(lèi)別名是什么。這種類(lèi)別屬性提供確 認Bean的功能,其他一些方法也可以做到這一點(diǎn)。最后一個(gè)必需的元素是“scope”屬性。有了“scope”屬性的幫助,你就能告訴Bean為單一頁(yè)面(默認情況)[scope="page"]、為[scope="request"]請求為會(huì )話(huà)[scope="session"],或者為整個(gè)應用程序[scope="application"]保持留信息。有了會(huì )話(huà)范圍,你就能非常容易地在JSP網(wǎng)頁(yè)面上維護購物車(chē)等項目。 </P>
<P>一旦你聲名了一個(gè)JavaBean,你就可以訪(fǎng)問(wèn)它的屬性來(lái)定制它。要獲得屬性值,請用“&lt;jsp:getProperty&gt;”標記。有了這個(gè)標記,你就能指定將要用到的Bean名稱(chēng)(從useBean的"id"字段得到)以及你想得到其值的屬性。實(shí)際的值被放在輸出中: <BR>&lt;jsp:getProperty id="localName" property="name" /&gt;。 </P>
<P>要改變JavaBean屬性,你必須使用“&lt;jsp:setProperty&gt;”標記。對這個(gè)標記,你需要再次識別Bean和屬性,以修改并額外提供新值。如果命名正確,這些值可以從一個(gè)已提交的表中直接獲得:參數獲得: <BR>&lt;jsp:setProperty id="localName" property="*" /&gt;; </P>
<P>可以從一個(gè)參數獲得,但你必須直接命名屬性和參數: <BR>&lt;jsp:setProperty id="localName" property="serialNumber" value="string" /&gt; </P>
<P>或者直接用一個(gè)名字稱(chēng)和值來(lái)設置: &lt;jsp:setProperty id="localName" property="serialNumber" value= &lt;%= expression %&gt; /&gt;. </P>
<P>關(guān)于JavaBean 的最后一件事: 為了Web服務(wù)器能找到JavaBean,你需要將其類(lèi)別文件放在一個(gè)特殊位置。用JSWDK,最 方便的位置是安裝目錄下的類(lèi)別目錄,如jswdk-1.0.1classes。 </P>
<P>JSP隱含對象 <BR>與JSP語(yǔ)法相關(guān)的最后的元素是一些叫做“隱含對象”的東西。在JSP代碼片段中,你可以利用這些隱含對象與JSP頁(yè)面的代碼片段執行環(huán)境產(chǎn)生互動(dòng)。應盡量少訪(fǎng)問(wèn)這些內置隱含對象。但是,在一某些情況下,訪(fǎng)問(wèn)隱含對象是可被接受的。若要充分利用隱含對象,就需了解最新的Java Servlet API。 <BR>下表列出可用的隱含對象集合。 </P>
<P>隱含對象說(shuō)明 <BR>request 客戶(hù)端請求,包括從GET/POST請求傳遞過(guò)來(lái)的參數 <BR>response 網(wǎng)頁(yè)傳回客戶(hù)端的反應 <BR>pageContext 在此管理網(wǎng)頁(yè)屬性 <BR>session 與請求關(guān)聯(lián)的會(huì )話(huà) <BR>application 代碼片段的運行環(huán)境 <BR>out 傳送響應的輸出流 <BR>config 代碼片段配置對象 <BR>page JSP網(wǎng)頁(yè)本身 <BR>exception 有錯的網(wǎng)頁(yè)中未被捕獲的例外 </P>

<P>這些都是用來(lái)做什么的,你又如何來(lái)使用它們呢?基本上說(shuō),在你的腳本片段里,你可以用它們進(jìn)入執行JSP代碼的代碼片段。用不著(zhù)深入了解太多的Servlet API細節,我們來(lái)看看能用它們來(lái)做到的某些事情: </P>
<P><BR>你可以不用表達式,直接進(jìn)入“Out”隱含對象,將某些內容輸出到響應中: <BR>&lt;% out.println("Hello"); %&gt;。 <BR>用不著(zhù)把一個(gè)參數直接送到JavaBean,你可以從請求對象獲取參數值: <BR>&lt;% String name=request.getParameter("name"); out.println(name); %&gt;. </P>
<P>在你用JSP進(jìn)行開(kāi)發(fā)的過(guò)程中,進(jìn)行更多的開(kāi)發(fā)的過(guò)程中,如果創(chuàng )建了JavaBeans或發(fā)現JSP文件中加入了太多的Java源代碼,你就需要創(chuàng )建起支持作用的Java分類(lèi)(class)了,它可以協(xié)助你重復利用源代碼并減少JSP網(wǎng)頁(yè)編譯時(shí)間。當你需要創(chuàng )建Java分類(lèi)文件時(shí),你必須: </P>
<P><BR>將JDSWK installationin目錄添加到PATH中。在autoexec.bat文件PATH行的末尾,加入“C:1.2.2/bin”。 <BR>用這個(gè)命令將JAR文件復制到“jrelibext:”目錄中: copy c:jswdk-1.0.1libservlet.jar c:jdk1.2.2jrelibext. </P>
<P>創(chuàng )建一個(gè)JSP網(wǎng)站 <BR>現在該是把所有這些JSP語(yǔ)法派上用場(chǎng)的時(shí)候了。我們將創(chuàng )建一個(gè)網(wǎng)頁(yè),它有一個(gè)輸入表單,可以使用戶(hù)輸入一個(gè)股票代號以獲得出當前股價(jià)(有20分鐘)。如果輸入有誤,則顯示報錯網(wǎng)頁(yè)。 </P>
<P>quote.jsp <BR>首先,用 這個(gè)代碼 創(chuàng )建一個(gè)quote.jsp網(wǎng)頁(yè)并將其保存在JSWDK安裝目錄下的網(wǎng)頁(yè)目錄中。大多數的網(wǎng)頁(yè)是標準的HTML,其間散布著(zhù)JSP代碼。第六行是一個(gè)網(wǎng)頁(yè)指示,表示將把所有錯誤發(fā)送到“errorPage.jsp”文中。第13到15行是一個(gè)腳本片段,主要說(shuō)明只有提供“符號”參數才會(huì )顯示表格!癐f”代碼段在32到34行結束。第17行定義了要用的JavaBean,第18行從參數加載JavaBean的符號屬性。第27行到29行顯示Bean的屬性。除了"if "代碼段,實(shí)際上并不涉及其它Java代碼。 </P>
<P>errorPage.jsp <BR>下一步,將下列JSP源代碼保存到網(wǎng)頁(yè)目錄中的“errorPage.jsp”文件中!斑@是一個(gè)錯誤網(wǎng)頁(yè)”的提示為第一行,它將isErrorPage網(wǎng)頁(yè)提示屬性設置為真。上一頁(yè)說(shuō)了明錯誤網(wǎng)頁(yè)的位置,本頁(yè)則說(shuō)明這就是錯誤網(wǎng)頁(yè)。其它JSP文件中的JSP專(zhuān)用代碼只有訪(fǎng)問(wèn)隱含例外對象才用到。網(wǎng)頁(yè)只顯示其值: </P>
<P>&lt;%@ page isErrorPage="true" %&gt; </P>
<P>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;Error Page&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; </P>
<P>&lt;h1&gt;Our Error Page&lt;/h1&gt;&lt;/font&gt; </P>
<P>&lt;!-- Print Exception --&gt; <BR>We got ourselves an exception: <BR>&lt;%= exception %&gt; <BR>&lt;a href="quote.jsp"&gt;Restart&lt;/a&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt;。 </P>
<P>Quotes.java <BR>Quotes JavaBean 利用Yahoo資源來(lái)獲得股票價(jià)格。需要將此 資源保存到JSWDK安裝目錄下“classescomjguru”目錄中的“quotes.java”文件中。請在此用JSDK中的Javac編輯器來(lái)編輯它。 </P>
<P><BR>你的第一個(gè)JSP網(wǎng)頁(yè)。 <BR>創(chuàng )建了這兩個(gè)JSP文件,建立了JavaBean資源文件并編輯了它后,你就可以從<a href="http://localhost:8080/quote.jsp" target="_blank" >http://localhost:8080/quote.jsp</A>加載“quote.jsp”文件以查看結果,假設你沒(méi)有更改JSWDK安裝設置,轉而使用別的端口。這個(gè)網(wǎng)頁(yè)當然能做得更漂亮,但是它已實(shí)現了需要實(shí)現的功能,并且很好地展示了JSP的功能。 <BR></P>
2#
firstcosmos 發(fā)表于 2005-12-15 18:35:00 | 只看該作者 來(lái)自 中國四川成都
<>JSP入門(mén)教程(4) <BR> <BR> <BR>使用腳本 <BR>在有些地方,你大概要加一些好的,成熟的程序到你的JSP頁(yè)里,JSP的標簽雖然很強大,但是完成某些工作還是比較費力的困難的。這時(shí)你可以使用腳本語(yǔ)言段來(lái)補充JSP標簽。 <BR>使用的JSP引擎是支持腳本語(yǔ)言的,SUN的JSP參考文說(shuō)明,必須使用Java程序語(yǔ)言來(lái)編寫(xiě)腳本,但是其他第三方的JSP引擎允許使用其他語(yǔ)言來(lái)寫(xiě)腳本程。 <BR>如何增加腳本 <BR>首先,你必須了解一些增加腳本元素到JSP頁(yè)中的一些基本規則 <BR>1、 在JSP頁(yè)面里用Page指令定義腳本(默認值是Java,一般不需要定義) <BR>2、 聲明語(yǔ)法&lt;%!……%&gt;聲明變量和方法(函數)。 <BR>3、 表達式語(yǔ)法&lt;%=……%&gt;定義腳本語(yǔ)言表達式 <BR>4、 腳本語(yǔ)法〈%……%&gt;可以操作聲明、表達式和其他類(lèi)型合法的代碼段在頁(yè)腳本語(yǔ)言。 <BR>5、 一定要在結尾加%&gt;標簽 <BR>聲明、表達式、腳本使用起來(lái)有一些相似,但也有一些不同讓我們用一些例子來(lái)講述一下相同點(diǎn)和不同點(diǎn)吧。 <BR>聲明&lt;%!……%&gt;包含了一個(gè)或多個(gè)變量和方法,結尾以分號分隔。 <BR>例:&lt;%! Int I=0 ; %&gt; <BR>&lt;%! Int a, b ; double c ; %&gt; <BR>&lt;%! Circle a = new circle(2.0) ; %&gt; <BR>在頁(yè)面中使用變量和方法之前必須聲明 <BR>聲明的范圍通常是JSP頁(yè),但如果頁(yè)面中使用INCLUDE指令包含其他頁(yè)面,范圍應變得擴展到被包含的頁(yè)面。 <BR>表達式&lt;%=……%&gt;可以在頁(yè)面中包含任何合法的語(yǔ)言表達式,不用分號。 <BR>例:&lt;%= Math.sqrt(2) %&gt; <BR>&lt;%= item %&gt; <BR>&lt;%= a+b+c %&gt; <BR>&lt;%= new java.util.date() %&gt; <BR>表達式和腳本的一個(gè)關(guān)鍵的不同點(diǎn)就是不需要分號。如果你需要在腳本中使用表達式就必須加分號。 <BR>腳本&lt;%……%&gt;允許你寫(xiě)的任何數量的腳本語(yǔ)言 <BR>例:&lt;% String name=null ; <BR>If (request.getParmeter("name")==null{ <BR>%&gt; <BR>記住在腳本中必須使用分號結尾。 <BR>猜數字游戲 <BR>猜數字游戲非常的有趣,而且從這里你還可以學(xué)到很多表達式的用法。 <BR>代碼 <BR>顯示用的主屏幕(numguess.jsp) <BR>&lt;!-- <BR>Number Guess Game <BR>Written by Jason Hunter, CTO, K&amp;A Software <BR><a href="mailtjasonh@kasoftware.com" target="_blank" >jasonh@kasoftware.com</A>, <a href="http://www.servlets.com" target="_blank" >http://www.servlets.com</A> <BR>Copyright 1999, K&amp;A Software <BR>Distributed by Sun Microsystems with permission <BR>--&gt; <BR>&lt;%@ page import = "num.NumberGuessBean" %&gt; </P>
<>&lt;jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session" /&gt; <BR>&lt;jsp:setProperty name="numguess" property="*" /&gt; </P>
<>&lt;html&gt; <BR>&lt;head&gt;&lt;title&gt;Number Guess&lt;/title&gt;&lt;/head&gt; <BR>&lt;body bgcolor="white"&gt; <BR>&lt;font size=4&gt; </P>
<P>&lt;% if (numguess.getSuccess() ) { %&gt; </P>
<P>Congratulations! You got it. <BR>And after just &lt;%= numguess.getNumGuesses() %&gt;tries.&lt;p&gt; </P>
<P>&lt;% numguess.reset(); %&gt; <BR>Care to &lt;a href="numguess.jsp"&gt;try again&lt;/a&gt;? </P>
<P>&lt;% } else if (numguess.getNumGuesses() == 0) { %&gt; </P>
<P>Welcome to the Number Guess game.&lt;p&gt; <BR>I'm thinking of a number between 1 and 100.&lt;p&gt; </P>
<P>&lt;form method=get&gt; <BR>What's your guess? &lt;input type=text name=guess&gt; <BR>&lt;input type=submit value="Submit"&gt; <BR>&lt;/form&gt; </P>
<P>&lt;% } else { %&gt; <BR>Good guess, but nope. Try &lt;b&gt;&lt;%= numguess.getHint() %&gt;&lt;/b&gt;. <BR>You have made &lt;%= numguess.getNumGuesses() %&gt; guesses. <BR>&lt;p&gt;I'm thinking of a number between 1 and 100. <BR>&lt;p&gt;&lt;form method=get&gt; </P>
<P>What's your guess? &lt;input type=text name=guess&gt; <BR>&lt;input type=submit value="Submit"&gt; <BR>&lt;/form&gt; <BR>&lt;% } %&gt; <BR>&lt;/font&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; </P>
<P>操作程序(NumberGuessBean.java) <BR>// Number Guess Game <BR>// Written by Jason Hunter, CTO, K&amp;A Software <BR>// <a href="mailtjasonh@kasoftware.com" target="_blank" >jasonh@kasoftware.com</A>, <a href="http://www.servlets.com" target="_blank" >http://www.servlets.com</A> <BR>// Copyright 1999, K&amp;A Software <BR>// Distributed by Sun Microsystems with permission </P>
<P>package num; <BR>import java.util.*; <BR>public class NumberGuessBean { <BR>int answer; <BR>boolean success; <BR>String hint; <BR>int numGuesses; <BR>public NumberGuessBean() { <BR>reset(); <BR>} <BR>public void setGuess(String guess) { <BR>numGuesses++; <BR>int g; <BR>try { <BR>g = Integer.parseInt(guess); <BR>} <BR>catch (NumberFormatException e) { <BR>g = -1; <BR>} <BR>if (g == answer) { <BR>success = true; <BR>} <BR>else if (g == -1) { <BR>hint = "a number next time"; <BR>} <BR>else if (g &lt; answer) { <BR>hint = "higher"; <BR>} <BR>else if (g &gt; answer) { <BR>hint = "lower"; <BR>} <BR>} <BR>public boolean getSuccess() { <BR>return success; <BR>} <BR>public String getHint() { <BR>return "" + hint; <BR>} <BR>public int getNumGuesses() { <BR>return numGuesses; <BR>} <BR>public void reset() { <BR>answer = Math.abs(new Random().nextInt() % 100) <BR>+ 1; <BR>success = false; <BR>numGuesses = 0; <BR>} <BR>} </P>
<P>在JSP文件中使用腳本 <BR>numguess.jsp是一個(gè)非常有趣兒的用腳本寫(xiě)的例子,你看他的結構其實(shí)是一個(gè)很大的IF……ELSE結構,但是很一個(gè)從句又都是用HTML寫(xiě)的,看起來(lái)象一個(gè)大的程序段。 <BR>不過(guò)你也不一定非得象numguess.jsp那樣用HTML和JSP標簽一起來(lái)寫(xiě)腳本。在&lt;%和%&gt;標簽之間,你可以寫(xiě)任意多行的腳本代碼,在通常情況下,盡量少用腳本來(lái)處理程序,而盡可能的使用servlets或者Beans,這樣你的程序看起來(lái)會(huì )非常的清析,明了。話(huà)又說(shuō)回來(lái),怎么寫(xiě)JSP還得根據你的習慣和愛(ài)好,我不強迫非得使用任何一種方法,SUN的JSP詳細說(shuō)明書(shū)不規定腳本的長(cháng)度。 </P>
<P>用標簽組合腳本 <BR>使用HTML和JSP標簽來(lái)寫(xiě)腳本的時(shí)候,注意前后的標簽不要忘記,一定要“封”好。說(shuō)的不明白,舉個(gè)例子吧: <BR>&lt;% } else { %&gt; &lt;!-- 用JSP標簽的時(shí)候先關(guān)上 --&gt; </P>
<P>... 這時(shí)候用JSP標簽吧 ... </P>
<P>&lt;% } %&gt; &lt;!-- 這樣你應該看懂了吧?! --&gt; <BR>開(kāi)始的時(shí)候這種做法看起來(lái)可能有一點(diǎn)奇怪,但它以確保你JSP文件編譯的時(shí)候腳本的成功轉換。 </P>
<P>那么,腳本什么時(shí)候執行呢? <BR>一個(gè)JSP原文件的處理分為兩個(gè)階段:一個(gè)是HTTP的編譯時(shí)候,一個(gè)是請求的處理時(shí)間。 </P>
<P>HTTP編譯的時(shí)候,當用戶(hù)第一次讀JSP頁(yè)面的時(shí)候,JSP的原代碼被編譯成CLASS,通常是servlet。HTML標簽和JSP標簽在這個(gè)時(shí)候同時(shí)被處理了,這之前用戶(hù)還沒(méi)有任何的請求被提交。 </P>
<P>請求處理時(shí)間是當用戶(hù)在JSP頁(yè)面中提交了一個(gè)請求,這時(shí)請求由客戶(hù)端被request對象傳到了服務(wù)器端,JSP引擎根據用戶(hù)提交的值執行編譯過(guò)的JSP文件或者servlet。 </P>
<P>當你在JSP頁(yè)中使用腳本的時(shí)候,你必須知道他們什么時(shí)候被執行。聲明在HTTP編譯階段就已經(jīng)被處理了,其他腳本,表達式在編譯JSP文件的時(shí)候也可用。表達式在HTTP編譯的時(shí)候也被執行了。表達式的值被轉換成了字符串被插入到JSP文件中一塊兒被編譯。其實(shí)在請求階段,腳本也是可以利用的。 </P>
<P>如何運行例子 <BR>我現在給出的都是在UNIX風(fēng)格下的路徑,如果你用Windows,那么改成Windows風(fēng)格路徑 <BR>1、猜數字游戲在裝TOMCAT或者JSWDK的時(shí)候就已經(jīng)裝好了。 <BR>2、.jsp和.html文件在../jswdk-1.0.1/examples/num中 <BR>3、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中 <BR>4、開(kāi)瀏覽器,http://機器名/examples/jsp/num/numguess.jsp <BR></P>
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

快速回復 返回頂部 返回列表
娱乐| 黄浦区| 洞头县| 伽师县| 乌兰察布市| 鹤庆县| 新和县| 伊通| 油尖旺区| 界首市| 绥芬河市| 仙居县| 牙克石市| 和政县| 田阳县| 浦城县| 筠连县| 甘南县| 浪卡子县| 德化县| 靖远县| 义乌市| 始兴县| 白水县| 寻甸| 乐东| 伊吾县| 洛南县| 林周县| 甘洛县| 河池市| 涡阳县| 昌平区| 邻水| 阿图什市| 余庆县| 当涂县| 中宁县| 临猗县| 临江市| 辽中县|