JSP的安裝、啓動及簡單示例

發布時間:2007年01月24日      浏覽次數:3334 次
一(yī)、 什麽是JSP
JSP(JavaServer Pages)是由Sun Microsystems公司倡導、許多公司參與一(yī)起建立的一(yī)種動态網頁技術标準,其網址爲http://www.javasoft.com/products/jsp。在傳統的網頁HTML文件(*.htm,*.html)中(zhōng)加入Java程序片段(Scriptlet)和JSP标記(tag),就構成了JSP網頁(*.jsp)。Web服務器在遇到訪問JSP網頁的請求時,首先執行其中(zhōng)的程序片段,然後将執行結果以HTML格式返回給客戶。程序片段可以操作數據庫、重新定向網頁以及發送 email 等等,這就是建立動态網站所需要的功能。所有程序操作都在服務器端執行,網絡上傳送給客戶端的僅是得到的結果,對客戶浏覽器的要求最低,可以實現無Plugin,無ActiveX,無Java Applet,甚至無Frame。
本文将介紹利用JSP技術開(kāi)發動态網頁的方法,還将簡要分(fēn)析JSP技術和 Microsoft 公司的 ASP 技術的不同之處。
二、 如何安裝和啓動
爲了實驗JSP技術,首先需要建立運行環境,這個過程相當簡單:
1、在 http://java.sun.com/jdk/處下(xià)載JDK(Java 2 SDK、Standard Edition、v 1.2.2)。
2、在http://java.sun.com/products/jsp/處下(xià)載JSWDK(JavaServer Web Development Kit 1.0.1)。Linux用戶可以在http://jakarta.apache.org/處下(xià)載Tomcat 3.0。
3、安裝
以Windows NT環境爲例,JDK的安裝是首先運行下(xià)載得到的jdk1_2_2-win.exe,然後修改系統環境參數,在PATH參數中(zhōng)加入[x:]jdk1.2.2in以及增加新的環境參數 CLASSPATH=[x:]jdk1.2.2lib ools.jar,其中(zhōng)[x:]是安裝JDK的硬盤符(c:、d: 等)。 JSWDK的安裝僅需将jswdk1_0_1-win.zip帶目錄釋放(fàng)到硬盤根目錄下(xià)(c:、d: 等),然後就可以在硬盤上找到jswdk-1.0.1目錄。将來如果不想保留JSWDK,删除這個目錄就可以了,沒有任何系統文件和注冊表遺留問題。更詳細的安裝過程以及Solaris/Unix和Linux下(xià)JDK、Tomcat的安裝可以參考下(xià)載得到的文件包中(zhōng)的安裝說明。
4、啓動
以Windows NT環境爲例,在jswdk-1.0.1目錄下(xià)執行startserver.bat,就可啓動JSWDK中(zhōng)一(yī)個支持JSP網頁技術的Web服務器。爲了不與現有的Web服務器(例如IIS、PWS等)沖突,JSWDK的Web服務器使用了8080端口。在浏覽器的地址欄中(zhōng)鍵入http://localhost:8080或者http://127.0.0.1:8080後,如果能看到 JSWDK 的歡迎頁就說明JSP實驗環境已經建成,可進入下(xià)一(yī)步實驗。要關閉Web服務器則運行stopserver.bat。
三、 JSP簡單示例
JSWDK中(zhōng)包含的Web服務器的文檔目錄在缺省狀态下(xià)爲jswdk-1.0.1webpages,主文檔在缺省狀态下(xià)爲index.html和index.jsp。也就是說訪問http://localhost:8080等于訪問jswdk-1.0.1webpagesindex.html。
用文本編輯器,如Windows中(zhōng)的記事本(Notepad),創建一(yī)個文本文件hi.jsp,保存在jswdk-1.0.1webpages目錄下(xià),其内容如下(xià):
<html>
<head>
<title>Hi-JSP實驗</title>
</head>
<body>
<%
String Msg = "This JSP test.";
out.print("Hello World!");
%>
<h2><%=Msg%></h2>
</body>
</html>
在浏覽器的地址欄中(zhōng)鍵入http://localhost:8080/hi.jsp,JSWDK中(zhōng)的Web服務器會執行JSP 文件中(zhōng)用〈%以及%>括起來的Java程序語句,其中(zhōng)out.print是将文字輸出到網頁,語句〈%= 變量 | 表達式%>的作用是将Java Scriptlet中(zhōng)變量或表達式的值輸出到網頁.
将變量Msg賦值爲中(zhōng)文字符串,用〈%= %>輸出,或者用out.print輸出中(zhōng)文字符串,則在英文版NT4及Redhat 6.1下(xià)實驗運行結果正常,而在中(zhōng)文NT 4.0和中(zhōng)文98下(xià),則反而會出現亂碼。
四、 統一(yī)的網站界面
JSP支持服務器端的文件包含,即可以在一(yī)個JSP文件中(zhōng)插入多個其他文件,用來實現統一(yī)的網站界面。修改上述hi.jsp并另存爲mypage.jsp:
<%@ include file="top.htm" %>
<%
String Msg = "This JSP test.";
out.print("Hello World!");
%>
<h2><%=Msg%></h2>
<%@ include file="bot.htm" %>
用可視化HTML編輯器,例如FrontPage、Dreamweave等設計網站的框架結構,将設計好的框架結構文件分(fēn)割成兩個部分(fēn),上面一(yī)半保存爲top.htm, 下(xià)面一(yī)半保存爲bot.htm,代碼如下(xià)面所示:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>我(wǒ)(wǒ)的主頁〈/title>
</head>
<body>
<table border="0" width="100%" cellpadding="4" cellspacing="0" align="center">
<tr>
<td width="100%" colspan="2" bgcolor="#837ED1" align="center"><font face="隸書(shū)" color="#FFFF00" size=5>主頁标題[/red]
</td>
</tr>
<tr>
<td bgcolor="#837ED1" width="15%" valign="top" align="center">
<font color="#FFFFFF">選項[/red]<p><font color="#FFFFFF">選項[/red]</p>
<p><font color="#FFFFFF">選項[/red]</p>
<p><font color="#FFFFFF">......[/red]</p>
<p> </p>
</td>
<td width="85%" valign="top">
----------------------------------------------------------------------------------------------------------------
</td>
</tr>
</table>
</body>
</html>
在浏覽器的地址欄中(zhōng)鍵入http://localhost:8080/mypage.jsp.
這樣網站的界面就能統一(yī)起來,而設計者可以集中(zhōng)精力在功能模塊上處理用戶登錄、連接數據庫、發送email等等。每個JSP文件都有如下(xià)結構:
<%@ include file="top.htm" %>
<%
// 實現某些功能
%>
<%@ include file="bot.htm" %>
維護網站的界面也相對比較容易,隻要修改top.htm和bot.htm,就能影響到所有網頁。
五、 服務器參數設置
JSWDK的Web服務器參數保存在jswdk-1.0.1webserver.xml中(zhōng),用Windows寫字闆打開(kāi)并編輯這個文件就可以修改缺省設置值。本節内容主要針對JSWDK,Linux下(xià)Tomcat的設置方法略有不同。
JSWDK缺省的文檔目錄是jswdk-1.0.1webpages,在此目錄下(xià)可以建立子目錄,例如jswdk-1.0.1webpages est,就能在浏覽器中(zhōng)用http://localhost/test訪問這個目錄,爲了使得這個子目錄能執行JSP程序,還必須在webserver.xml中(zhōng)的〈Service>〈/Service>節加入:
<WebApplication id="test" mapping="/test" docBase="webpages/test" /> 并且,還必須建立jswdk-1.0.1webpages estWEB-INF目錄,并從jswdk-1.0.1webpagesWEB-INF目錄中(zhōng)複制過來以下(xià)四個文件:mappings.properties、mime.properties、servlets.properties以及webapp.properties。完成這些過程,才能通知(zhī)JSWDK的Web服務器執行http://localhost/test 中(zhōng)的JSP程序。
六、 JavaBean
JSP網頁吸引人的地方之一(yī)就是能結合JavaBean技術來擴充網頁中(zhōng)程序的功能。 JavaBean是一(yī)種Java類 (class),通過封裝屬性和方法成爲具有某種功能或者處理某個業務的對象。JavaBean被組織成爲package(數據包)以便進行管理,實際上就是把一(yī)組JavaBean一(yī)起放(fàng)在某某目錄中(zhōng),每個類的定義前加上package某某,本例中(zhōng)爲test。目錄test必須放(fàng)在系統環境CLASSPATH包含的目錄下(xià),系統才能找到其中(zhōng)的JavaBean。JSWDK在缺省狀态下(xià)将jswdk-1.0.1webpagesWEB-INFjspeans 加入CLASSPATH。建立自己的JavaBean和package時,就放(fàng)在這個目錄中(zhōng)也不失爲一(yī)種簡易的方法。
下(xià)面介紹一(yī)個簡單的JavaBean框架。用文本編輯器創建一(yī)個文本文件helloWorld.java,并保存在jswdk-1.0.1webpagesWEB-INFjspeans est目錄下(xià),其内容如下(xià):
package test;
public class helloWorld {
public String name = "My first bean";
public String getHi()
{
return "Hello from " + name;
}
}
helloWorld.java編輯好後,在DOS狀态下(xià),進入目錄jswdk-1.0.1webpagesWEB-INFjspeans,用JDK的javac命令編譯helloWorld.java如下(xià):
javac helloWorld.java
注意,Java是區分(fēn)大(dà)小(xiǎo)寫的,在程序中(zhōng),編譯命令行中(zhōng)字母的大(dà)小(xiǎo)寫都不能寫錯。編譯成功就表示建立了一(yī)個JavaBean。下(xià)面看如何在JSP中(zhōng)使用這個JavaBean。用文本編輯器創建一(yī)個文本文件hi-bean.jsp,并保存在jswdk-1.0.1webpages est目錄下(xià),其内容如下(xià):
<html>
<head>
<title>JavaBean 試驗</title>
</head>
<body>
<jsp:useBean id="helloBean" scope="session" class="test.helloWorld" />
<%= helloBean.getHi() %>
<hr>
<%
helloBean.name = "JSP";
out.print(helloBean.getHi());
%>
</body>
</html>
在JSP網頁中(zhōng),使用 <jsp:useBean ... />語法來創建JavaBean對象,并命名爲helloBean。讀者可從這個簡單的例子中(zhōng)看出設置、獲取JavaBean屬性,以及調用JavaBean方法的做法。在浏覽器的地址欄中(zhōng)鍵入http://localhost:8080/test/hi-bean.jsp,得到結果如圖3所示。注意,如果修改和重新編譯了JavaBean程序,則需要關閉和重新啓動JSWDK的Web服務器以後修改的結果才會有效。如果僅僅修改JSP文件,則不用重新啓動JSWDK的Web服務器。
雖然,這僅僅完成了一(yī)個非常簡單的JavaBean框架,但是遵循這個框架可以設計出多種多樣的JavaBean。例如,從JSP中(zhōng)訪問數據通常就是通過JavaBean來實現的。
七、 數據庫連接
數據庫連接對動态網站來說是最爲重要的部分(fēn),Java中(zhōng)連接數據庫的技術是JDBC(Java Database Connectivity)。很多數據庫系統帶有JDBC驅動程序,Java程序就通過JDBC驅動程序與數據庫相連,執行查詢、提取數據等等操作。Sun公司還開(kāi)發了JDBC-ODBC bridge,用此技術Java程序就可以訪問帶有ODBC驅動程序的數據庫,目前大(dà)多數數據庫系統都帶有ODBC驅動程序,所以Java程序能訪問諸如Oracle、Sybase、MS SQL Server和MS Access等數據庫。下(xià)面介紹如何用Access實現一(yī)個動态FAQ(常見問題及答案)網站。首先建立一(yī)個Access數據庫faq.mdb,其中(zhōng)的表faqs有字段id(自動增量型,并設爲主關鍵字)、subject(文字型,長度200)、answers(備注型)。這個表中(zhōng)可以存放(fàng)一(yī)些編程知(zhī)識的常見問題及答案,
然後,在Control Panel(控制面闆)的ODBC Datasource模塊中(zhōng)加入System DSN,取名faq,并指向faq.mdb。 創建一(yī)個JavaBean,名爲faq.java,并保存在jswdk-1.0.1webpagesWEB-INFjspeans est目錄下(xià)。faq.java 的内容如下(xià):
package test;
import java.sql.*;
public class faq {
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:faq";
Connection conn = null;
ResultSet rs = null;
public faq() {
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println("faq(): " + e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(sConnStr);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return rs;
}
}
用上一(yī)節介紹的方法編譯faq.java以後,在jswdk-1.0.1webpages est目錄下(xià)創建JSP文件faq.jsp,其内容如下(xià):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>我(wǒ)(wǒ)的FAQ !</title>
</head>
<body>
<p>[b]這是我(wǒ)(wǒ)的FAQ![/b]</p>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="workM" scope="page" class="test.faq" />
<%
ResultSet RS = workM.executeQuery("SELECT * FROM faqs");
String tt;
while (RS.next()) {
tt = RS.getString("Answer");
out.print("<LI>" + RS.getString("Subject") + "</LI>");
out.print("<pre>" + tt + "</pre>");
}
RS.close();
%>
在浏覽器的地址欄中(zhōng)鍵入http://localhost:8080/test/faq.jsp,faq.jsp調用JavaBean,從數據庫中(zhōng)讀出内容并輸出.
限于篇幅,本文不能列舉JSP-JavaBean-JDBC/ODBC-數據庫的複雜(zá)例子,讀者可以從本文最後所推薦的網址中(zhōng)找到并下(xià)載到數據庫連接範例。
八、 技術分(fēn)析
Microsoft 公司的 ASP 技術也是動态網頁開(kāi)發技術。JSP和ASP從形式上非常相似,ASP程序員(yuán)一(yī)眼就能認出〈% %>以及〈%= %>。但是深入探究下(xià)去(qù)會發現它們很多的差别,其中(zhōng)最主要的有以下(xià)三點:
1、 JSP的效率和安全性更高
ASP以源碼形式存放(fàng),以解釋方式運行,每次ASP網頁調用都需要對源碼進行解釋,運行效率不高。另外(wài),IIS的漏洞曾使得許多網站源程序大(dà)曝光,包括筆者以前用ASP開(kāi)發的網站,ASP程序全部被人下(xià)載了去(qù)。
JSP在執行以前先被編譯成字節碼 (byte code),字節碼由Java虛拟機(Java Virtual Machine)解釋執行,比源碼解釋的效率高;服務器上還有字節碼的Cache機制,能提高字節碼的訪問效率。第一(yī)次調用JSP網頁可能稍慢(màn),因爲它被編譯成Cache,以後就快得多了。同時,JSP源程序不大(dà)可能被下(xià)載,特别是JavaBean程序完全可以放(fàng)到不對外(wài)的目錄中(zhōng)。
2、 JSP的組件 (Component) 方式更方便
ASP通過COM來擴充複雜(zá)的功能,如文件上載、發送email以及将業務處理或者複雜(zá)計算分(fēn)離(lí)出來成爲獨立可重複利用的模塊。JSP通過JavaBean實現了同樣的功能擴充。
在開(kāi)發方面,COM的開(kāi)發遠比JavaBean複雜(zá)和繁瑣,學會ASP不難,但學會開(kāi)發COM可不簡單。而JavaBean就簡單多了,從本文上述示例中(zhōng)可以看出開(kāi)發JavaBean很方便。
在維護方面,COM必須在服務器上注冊,如果修改了COM程序,就必須重新注冊,甚至必須關機和重新啓動。JavaBean則不需要注冊,放(fàng)在CLASSPATH包含的目錄中(zhōng)就行了。如果JavaBean進行了修改,則JSWDK和Tomcat現在還需要關閉和重新運行(但不是關機),但開(kāi)發者已經許諾将在以後的版本中(zhōng)做到不需要關閉服務器。
另外(wài)JavaBean是完全的OOP,可以針對不同的業務處理功能方便地建立一(yī)整套可重複利用的對象庫,例如用戶權限控制、email自動回複等等。
3、 JSP的适應平台更廣
ASP目前僅适用于NT和IIS。雖然Unix下(xià)有ChiliSoft的插件來支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的組合來擴充,Unix下(xià)的COM實現起來非常困難。
JSP則不同,幾乎所有平台都支持Java,JSP+JavaBean可以在所有平台下(xià)通行無阻。NT下(xià)IIS通過一(yī)個插件,例如JRUN(http://www3.allaire.com/products/jrun/)或者ServletExec(http://www.newatlanta.com/),就能支持JSP。著名的Web服務器Apache已經能夠支持JSP。由于Apache廣泛應用在NT、Unix和Linux上,因此JSP有更廣泛的運行平台。雖然現在NT操作系統占了很大(dà)的市場份額,但是在服務器方面Unix的優勢仍然很大(dà),而新崛起的Linux更是來勢不小(xiǎo)。
從一(yī)個平台移植到另外(wài)一(yī)個平台,JSP和JavaBean甚至不用重新編譯,因爲Java字節碼都是标準的與平台無關的。筆者将在NT下(xià)實驗的JSP網頁原封不動地拿到Linux下(xià)就運行起來了,感覺非常滿意。
九、 結論
綜上所述,JSP可謂是構建動态網站的一(yī)個利器,故推薦給讀者,祝願你們掌握JSP,開(kāi)發出優秀的網站。ASP程序員(yuán)也請試一(yī)下(xià),JSP裏也有session、request、response/out等對象,親自試試看如何。
文章來源:http://mysheji.com/Article_Show.asp?ArticleID=2274
免責聲明:本站相關技術文章信息部分(fēn)來自網絡,目的主要是傳播更多信息,如果您認爲本站的某些信息侵犯了您的版權,請與我(wǒ)(wǒ)們聯系,我(wǒ)(wǒ)們會即時妥善的處理,謝謝合作!