JSP入門教程(1)_JSP編程
最後更新:2017-01-18
來源:互聯網
上載者:User
JavaServer Pages (JSP)是基於Java的技術,用於建立可支援跨平台及跨Web伺服器的動態網頁。
JSP可與微軟的Active Server Pages (ASP)相媲美,但JSP使用的是類似於HTML的標記和Java 程式碼片段而不是用VBScript。當你使用不提供ASP本地支援的Web伺服器(例如 Apache或Netscape伺服器)時,你就可以考慮使用JSP了。你雖然也可以為這些伺服器弄一個ASP附加軟體模組,但是太昂貴了。現在Sun公司並不會因你使用JSP向你收費(雖然將來可能要收),況且用於Solaris、 Linux以及Windows系統的組件都很容易獲得。
不要把JSP與伺服器端的JavaScript語言搞混了。Web伺服器自動將通過JSP產生的Java程式碼片段轉換成Java 片段(servlets)。 JSP也可自動控制許多功能,如過去用Perl指令碼編寫功能程式或像ASP這樣的伺服器專用API(應用編程介面)。
我們馬上就要開始協助你建立一個使用JSP 技術的網站範例了。
準備好電腦以使用JSP
你需要Java2軟體開發工具箱(J2SDK),過去稱之為Java開發工具箱(JDK)、JavaServer 網路開發工具箱(JSWDK)、Tomcat,或者其它能支援JSP的Web伺服器。昇陽公司為Windows、Solaris以及 Linux平台提供免費的J2SDK和JSWDK。
如果你想在現有的Web伺服器上使用JSP,而此伺服器本身不支援JSP和Java 程式碼片段,可以試用Allaire公司的Jrun。它可以為Netscape的Enterprise Server和Fasttrack Server、微軟的Internet Information Server(IIS)和Personal Web Server(PWS)、Apache以及其他伺服器充當Web伺服器附件。你也可以使用Apache伺服器的Java版,其中包含最新的JSWDK。
下載並安裝所需的軟體
目前,版本號碼為1.2.2-001的J2SDK可下載版以可安裝的歸檔檔案形式出現。這個大約20MB的下載量軟體可提供一個徹底的Java開發環境,讓你創造任何基於Java並且利用了而標準核心API的解決方案。其實,你的Web伺服器使用JSP的唯一條件是要有Java編輯器。要讓Web伺服器知道編輯器的位置,需要JAVA_HOME 環境變數設定為J2SDK安裝目錄。如果你已經在Windows系統中進行了安裝並且接受了預設目錄, 請將“set JAVA_HOME=C:1.2.2”添加到你的“autoexec.bat”檔案中,然後重新啟動。
安裝J2SDK後,下載並安裝JSWDK或者是Tomcat β版,即基於Java的Apache Web伺服器的β版。你把JSWDK放在什麼地方是無關緊要的,只要你以後能找到它就行。通常,將其放在頂層目錄中,這樣你在替換JSWDK或JSDK時無需刪除另一個軟體。安裝好這個檔案後,準備工作已經就緒,你可以開始JSP開發工作了。
正確地安裝JSWDK後,請運行“startserver”指令碼程式,以啟動Web伺服器,使其按照預設情況監聽8080連接埠。你要在啟動伺服器之後查看您是否已正確地安裝了此工具,請載入一個JSP樣本檔案(http://locahost:8080/examples/jsp/)。如果你能成功地運行這些樣本檔案,說明你已經正確地安裝了這個軟體。如果你在用來啟動伺服器的控制台視窗中看到報錯資訊,你就需要做些修改。最經常發生的問題是沒有設定或不正確地設定了JAVA_HOME環境變數。要看到當前環境變數設定情況,要請在DOS提示符下鍵入“set”設定。
開始
在解釋 JSP文法前,建立一個快捷網頁,顯示目當前的日期和時間,並然後將之其儲存為sample.jsp:
<html>
<head>
<title>First Page</title>
</head>
<body>
<H3>Today is:
<%= new java.util.Date() %>
</H3>
</body>
</html>.
把這個檔案以及你所有的HTML 和 JSP 頁面放在JSWDK安裝目錄下的網頁目錄裡。你可以從http://localhost:8080/sample.jsp載入此網頁。該網頁首次被訪問時,Web伺服器會把JSP編譯成Java程式碼片段,這樣你就能夠看到當前的日期和時間了。
你已經下載、安裝並配置好了開發環境,你可以開始學習JSP文法並建立自己的基於JSP的解決方案了。
JSP基本文法
講完安裝問題後,現在進入來討論JSP文法。一個投機取巧的辦法是下載文法卡片。如果你不熟悉Java編程,也許你想看一下Sun的指南 。然而網頁建立者並不需要進行太多的Java開發。除了一些方法調用,在你的JSP網頁裡應儘可能少用Java代碼。
記住以上提示,我們首先來看一看JSP指令和指令碼元素,之後我們會解釋JavaBeans和隱含對象。共有五種JSP指令和指令碼元素。在JSP 1.0版中,大部分JSP被一個以“<%” 開頭和以“%>”結尾的的標記括在其中。在更新的JSP 1.1規範出台後,就有了與XML相容的版本。
JSP指令和指令碼元素
Directives <%@ directive %>
Declarations <%! declaration %>
Expressions <%= expression %>
Code Fragment/Scriptlet <% code fragment %>
Comments <%-- comment --%>
指令
JSP指令是為JSP引擎而設計的。他們並不直接產生任何可見輸出,而只是告訴引擎如何處理其餘JSP頁面。這些指令始終被括在 “<%@ ?%>”標記中。兩個最重要的指令是“pagePage”和“Include”。“Taglib”指令不在討論之列,但是在用JSP1.1建立自訂標籤可以使用它。
幾乎在所有JSP頁面頂部都會看到“Page”指令。儘管不是必須的,但它可以讓你指定:
到何處尋找起支援作用的Java類別:
<%@ page import="java.util.Date" %>,
出現Java運行問題時,將網上衝浪者引向何處:
<%@ page errorPage="errorPage.jsp" %>,
還有你是否需要系統管理使用者的會話級資訊,這些資訊可能來自多個網頁(在下面的JavaBeans一節將對此做進一步講)述:
<%@ page session="true" %>.
“Include”指令可以把你的內容分成更多可管理的元素,比如包括一個普通頁首或頁尾的元素。包含的網頁可以是一個固定的HTML 頁面或更多的JSP內容:
<%@ include file="filename.jsp" %>
聲明
JSP聲明用來讓你定義頁面級變數,以儲存資訊或定義JSP頁面的其餘部分可能需要的支援方法。如果你發現代碼太多,通常最好把它們寫成一個獨立的Java類別。聲明一般都在“<%! ?%>”標記中。一定要以分號(;)結束變數聲明,因為任何內容都必須是有效Java語句:
<%! int i=0; %>。
運算式
有了JSP運算式,運算式評估結果會被轉換成一個字串,並且被直接包括在輸出頁面之內。JSP 運算式包含在“<%= ?%>” 標記中,沒有分號,除非在加引號的字串部分使用分號。
<%= i %>
<%= "Hello" %> .
程式碼片段/指令碼片段
程式碼片段/指令碼片段(Scriptlets) JSP程式碼片段或指令碼片段是嵌在“<% ?%>”標記中的。這種Java代碼在Web伺服器響應請求時就會運行。在指令碼片段周圍可能是原始的HTML或XML語句,在這些地方,程式碼片段可以使你建立條件執行代碼,或要用到另外一段代碼的代碼。例如,以下的程式碼群組合使用運算式和程式碼片段,顯示H1、H2、H3和H4標記中的字串“Hello”。程式碼片段並不局限於一行原始碼:
<% for (int i=1; i<=4; i++) { %>
<H<%=i%>>Hello</H<%=i%>>
<% } %>.
注釋
最後一個主要的JSP元素是嵌入式注釋。儘管你始終可以在檔案中加入HTML注釋,但使用者在查看頁面原始碼時會看到這些注釋。如果你不想讓使用者看到它,你就應該將其嵌入“<%-- ?--%>” 標記中:
<%-- comment for server side only --%>.
帶JavaBean 的JSP
雖然你可以把大段的代碼放在指令碼片段(scriptlet)內,但是絕大多數的Java代碼屬於可重複使用的名為JavaBea的組件。JavaBean類似於ActiveX控制項:他們都能提供常用功能並且可以重複使用。
JavaBean的值是通過一些屬性獲得的,你可通過這些屬性訪問JavaBean設定。以一個人來打比方,這個人就是一個JavaBean,這個人的名字、社會安全號碼碼以及住址就是其屬性。在JSP網站,你基本上就是通過玩“Connect the beans)”來使你的網站動態化。
假設JavaBean先於網站被建立出來,你需要做的第一件事就是告訴JSP頁面它將要用到一個“Bean”。你可以用“<jsp:useBean>”標記來做到這一點:
<jsp:useBean id="localName" class="com.jguru.Person" scope="application" />。
“<jsp:useBean>”標記要求你用“id”屬性來識鑒別Bean。這裡你提供一個名字來JSP頁面其餘部分的Bean。除了“id”屬性,你還須告訴網頁面從何處尋找Bean,或者它的Java類別名是什麼。這種類別屬性提供確 認Bean的功能,其他一些方法也可以做到這一點。最後一個必需的元素是“scope”屬性。有了“scope”屬性的協助,你就能告訴Bean為單一頁面(預設情況)[scope="page"]、為[scope="request"]請求為會話[scope="session"],或者為整個應用程式[scope="application"]保持留資訊。有了會話範圍,你就能非常容易地在JSP網頁面上維護購物車等項目。
一旦你聲名了一個JavaBean,你就可以訪問它的屬性來定製它。要獲得屬性值,請用“<jsp:getProperty>”標記。有了這個標記,你就能指定將要用到的Bean名稱(從useBean的"id"欄位得到)以及你想得到其值的屬性。實際的值被放在輸出中:
<jsp:getProperty id="localName" property="name" />。
要改變JavaBean屬性,你必須使用“<jsp:setProperty>”標記。對這個標記,你需要再次識別Bean和屬性,以修改並額外提供新值。如果命名正確,這些值可以從一個已提交的表中直接獲得:參數獲得:
<jsp:setProperty id="localName" property="*" />;
可以從一個參數獲得,但你必須直接命名屬性和參數:
<jsp:setProperty id="localName" property="serialNumber" value="string" />
或者直接用一個名字稱和值來設定: <jsp:setProperty id="localName" property="serialNumber" value= <%= expression %> />.
關於JavaBean 的最後一件事: 為了Web伺服器能找到JavaBean,你需要將其類別檔案放在一個特殊位置。用JSWDK,最 方便的位置是安裝目錄下的類別目錄,如jswdk-1.0.1classes。
JSP隱含對象
與JSP文法相關的最後的元素是一些叫做“隱含對象”的東西。在JSP程式碼片段中,你可以利用這些隱含對象與JSP頁面的程式碼片段執行環境產生互動。應盡量少訪問這些內建隱含對象。但是,在一某些情況下,訪問隱含對象是可被接受的。若要充分利用隱含對象,就需瞭解最新的Java Servlet API。
下表列出可用的隱含對象集合。
隱含對象說明
request 用戶端請求,包括從GET/POST請求傳遞過來的參數
response 網頁傳回用戶端的反應
pageContext 在此管理網頁屬性
session 與請求關聯的會話
application 程式碼片段的運行環境
out 傳送響應的輸出資料流
config 程式碼片段設定物件
page JSP網頁本身
exception 有錯的網頁中未被捕獲的例外
這些都是用來做什麼的,你又如何來使用它們呢?基本上說,在你的指令碼片段裡,你可以用它們進入執行JSP代碼的程式碼片段。用不著深入瞭解太多的Servlet API細節,我們來看看能用它們來做到的某些事情:
你可以不用運算式,直接進入“Out”隱含對象,將某些內容輸出到響應中:
<% out.println("Hello"); %>。
用不著把一個參數直接送到JavaBean,你可以從請求對象擷取參數值:
<% String name=request.getParameter("name"); out.println(name); %>.
在你用JSP進行開發的過程中,進行更多的開發的過程中,如果建立了JavaBeans或發現JSP檔案中加入了太多的Java原始碼,你就需要建立起支援作用的Java分類(class)了,它可以協助你重複利用原始碼並減少JSP網頁編譯時間。當你需要建立Java分類檔案時,你必須:
將JDSWK installationin目錄添加到PATH中。在autoexec.bat檔案PATH行的末尾,加入“C:1.2.2/bin”。
用這個命令將JAR檔案複製到“jrelibext:”目錄中: copy c:jswdk-1.0.1libservlet.jar c:jdk1.2.2jrelibext.
建立一個JSP網站
現在該是把所有這些JSP文法派上用場的時候了。我們將建立一個網頁,它有一個輸入表單,可以使使用者輸入一個股票看板代號以獲得出當前股價(有20分鐘)。如果輸入有誤,則顯示報錯網頁。
quote.jsp
首先,用 這個代碼 建立一個quote.jsp網頁並將其儲存在JSWDK安裝目錄下的網頁目錄中。大多數的網頁是標準的HTML,其間散布著JSP代碼。第六行是一個網頁指示,表示將把所有錯誤發送到“errorPage.jsp”文中。第13到15行是一個指令碼片段,主要說明只有提供“符號”參數才會顯示表格。“If”程式碼片段在32到34行結束。第17行定義了要用的JavaBean,第18行從參數載入JavaBean的符號屬性。第27行到29行顯示Bean的屬性。除了"if "程式碼片段,實際上並不涉及其它Java代碼。
errorPage.jsp
下一步,將下列JSP原始碼儲存到網頁目錄中的“errorPage.jsp”檔案中。“這是一個錯誤網頁”的提示為第一行,它將isErrorPage網頁提示屬性設定為真。上一頁說了明錯誤網頁的位置,本頁則說明這就是錯誤網頁。其它JSP檔案中的JSP專用代碼只有訪問隱含例外對象才用到。網頁只顯示其值:
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>Our Error Page</h1></font>
<!-- Print Exception -->
We got ourselves an exception:
<%= exception %>
<a href="quote.jsp">Restart</a>
</body>
</html>。
Quotes.java
Quotes JavaBean 利用Yahoo資源來獲得股票價格。需要將此 資源儲存到JSWDK安裝目錄下“classescomjguru”目錄中的“quotes.java”檔案中。請在此用JSDK中的Javac編輯器來編輯它。
你的第一個JSP網頁。
建立了這兩個JSP檔案,建立了JavaBean資源檔並編輯了它後,你就可以從http://localhost:8080/quote.jsp載入“quote.jsp”檔案以查看結果,假設你沒有更改JSWDK安裝設定,轉而使用別的連接埠。這個網頁當然能做得更漂亮,但是它已實現了需要實現的功能,並且很好地展示了JSP的功能。