插件索引
           
常用工具
查看積分策略說明 打印

用JSP構建動態網站

香港易存網庫 [服務器租用|easyhost.com.hk] 域名 電郵 VPN 網頁寄存 快速穩定 雲端 Hosting Server 電話:(852)-21550486 / (86)-21-61979257 服務:[ 資訊, 電郵服務, 資訊網絡, 網頁儲存, 網頁設計, 網站設計, 網頁寄存, 網站寄存, 主機租用, 主機托管, 伺服器管理, 伺服器租用, 伺服器托管, 服務器租用, 服務器托管, 香港服務器托管, 香港服務器租用, 域名註冊, 網站地圖, 客戶優惠, 報章報導, web hosting, hosting, email service, web page design, web design, dedicated server, dedicated host, server management, server colocation, colocation, Virtual Host, MPLS, CDN, IPLC ]

用JSP構建動態網站

一、 什麼是JSP

JSP(JavaServer Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準,其網址為http://www.javasoft.com/products/jsp。
在傳統的網頁HTML檔(*.htm,*.html)中加入Java程式片段(Scriptlet)和JSP標記(tag),就構成了JSP網頁(*.jsp)。Web伺服器在遇到訪問JSP網頁的請求時,首先執行其中的程式片段,然後將執行結果以HTML格式返回給客戶。程式片段可以操作資料庫、重新定向網頁以及發送 email 等等,這就是建立動態網站所需要的功能。所有程式操作都在伺服器端執行,網路上傳送給用戶端的僅是得到的結果,對客戶流覽器的要求最低,可以實現無Plugin,無ActiveX,無Java Applet,甚至無Frame。
本文將介紹利用JSP技術開發動態網頁的方法,還將簡要分析JSP技術和 Microsoft 公司的 ASP 技術的不同之處。


二、 如何安裝和啟動
為了實驗JSP技術,首先需要建立運行環境,這個過程相當簡單:
1、在 http://java.sun.com/jdk/處下載JDK(Java 2 SDK、Standard Edition、v 1.2.2)。
2、在http://java.sun.com/products/jsp/處下載JSWDK(JavaServer Web Development Kit 1.0.1)。Linux用戶可以在http://jakarta.apache.org/處下載Tomcat 3.0。
3、安裝
以Windows NT環境為例,JDK的安裝是首先運行下載得到的jdk1_2_2-win.exe,然後修改系統環境參數,在PATH參數中加入[x:]\jdk1.2.2\bin以及增加新的環境參數 CLASSPATH=[x:]\jdk1.2.2\lib\tools.jar,其中[x:]是安裝JDK的硬碟符(c:、d: 等)。
JSWDK的安裝僅需將jswdk1_0_1-win.zip帶目錄釋放到硬碟根目錄下(c:\、d:\ 等),然後就可以在硬碟上找到\jswdk-1.0.1\目錄。將來如果不想保留JSWDK,刪除這個目錄就可以了,沒有任何系統檔和註冊表遺留問題。更詳細的安裝過程以及Solaris/Unix和Linux下JDK、Tomcat的安裝可以參考下載得到的檔包中的安裝說明。
4、啟動
以Windows NT環境為例,在\jswdk-1.0.1\目錄下執行startserver.bat,就可啟動JSWDK中一個支援JSP網頁技術的Web伺服器。為了不與現有的Web伺服器(例如IIS、PWS等)衝突,JSWDK的Web伺服器使用了8080埠。
在流覽器的地址欄中鍵入http://localhost:8080或者http://127.0.0.1:8080後,如果能看到 JSWDK 的歡迎頁就說明JSP實驗環境已經建成,可進入下一步實驗。
要關閉Web伺服器則運行stopserver.bat。


三、 JSP簡單示例
JSWDK中包含的Web伺服器的文檔目錄在缺省狀態下為\jswdk-1.0.1\webpages,主文檔在缺省狀態下為index.html和index.jsp。也就是說訪問http://localhost:8080等於訪問\jswdk-1.0.1\webpages\index.html。
用文本編輯器,扛有病毒連結0250,請立即通知管理員ows中的記事本(Notepad),創建一個文字檔案hi.jsp,保存在\jswdk-1.0.1\webpages\目錄下,其內容如下:

<html>
<head>
<title>Hi-JSP實驗</title>
</head>
<body>
<%
String Msg = "This JSP test.";
out.print("Hello World!");
%>
<h2><%=Msg%></h2>
</body>
</html>

在流覽器的地址欄中鍵入http://localhost:8080/hi.jsp,JSWDK中的Web伺服器會執行JSP 文件中用<%以及%>括起來的Java程式語句,其中out.print是將文字輸出到網頁,語句<%= 變數 | 運算式%>的作用是將Java Scriptlet中變數或運算式的值輸出到網頁,執行結果如圖1。
圖1

將變數Msg賦值為中文字串,用<%= %>輸出,或者用out.print輸出中文字串,則在英文版NT4及Redhat 6.1下實驗運行結果正常,而在中文NT 4.0和中文98下,則反而會出現亂碼。

四、 統一的網站介面
JSP支援伺服器端的檔包含,即可以在一個JSP檔中插入多個其他檔,用來實現統一的網站介面。修改上述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等設計網站的框架結構,將設計好的框架結構檔分割成兩個部分,上面一半保存為top.htm, 下面一半保存為bot.htm,代碼如下面所示:
<html>
<head>
<meta http-equiv="Content-Type" c>
<title>我的主頁</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="隸書"
color="#FFFF00" size=5>主頁標題</font>
</td>
</tr>
<tr>
<td bgcolor="#837ED1" width="15%" valign="top" align="center"><br>
<font color="#FFFFFF">選項</font><p><font color="#FFFFFF">選項</font></p>
<p><font color="#FFFFFF">選項</font></p>
<p><font color="#FFFFFF">......</font></p>
<p> </p>
</td>
<td width="85%" valign="top">
----------------------------------------------------------------------------------------------------------------
</td>
</tr>
</table>
</body>
</html>
在流覽器的地址欄中鍵入http://localhost:8080/mypage.jsp,得到結果如圖2。


圖2
這樣網站的介面就能統一起來,而設計者可以集中精力在功能模組上處理用戶登錄、連接資料庫、發送email等等。每個JSP檔都有如下結構:
<%@ include file="top.htm" %>
<%
// 實現某些功能
%>
<%@ include file="bot.htm" %>

維護網站的介面也相對比較容易,只要修改top.htm和bot.htm,就能影響到所有網頁。

五、 伺服器參數設置
JSWDK的Web伺服器參數保存在\jswdk-1.0.1\webserver.xml中,用Windows寫字板打開並編輯這個檔就可以修改缺省設置值。本節內容主要針對JSWDK,Linux下Tomcat的設置方法略有不同。
JSWDK缺省的文檔目錄是\jswdk-1.0.1\webpages,在此目錄下可以建立子目錄,例如\jswdk-1.0.1\webpages\test,就能在流覽器中用http://localhost/test訪問這個目錄,為了使得這個子目錄能執行JSP程式,還必須在webserver.xml中的<Service></Service>節加入:
<WebApplication id="test" mapping="/test" docBase="webpages/test" />
並且,還必須建立\jswdk-1.0.1\webpages\test\WEB-INF目錄,並從\jswdk-1.0.1\webpages\WEB-INF目錄中複製過來以下四個檔:mappings.properties、mime.properties、servlets.properties以及webapp.properties。完成這些過程,才能通知JSWDK的Web伺服器執行http://localhost/test 中的JSP程式。

六、 JavaBean
JSP網頁吸引人的地方之一就是能結合JavaBean技術來擴充網頁中程式的功能。
JavaBean是一種Java類 (class),通過封裝屬性和方法成為具有某種功能或者處理某個業務的物件。JavaBean被組織成為package(資料包)以便進行管理,實際上就是把一組JavaBean一起放在某某目錄中,每個類的定義前加上package某某,本例中為test。目錄test必須放在系統環境CLASSPATH包含的目錄下,系統才能找到其中的JavaBean。JSWDK在缺省狀態下將\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\ 加入CLASSPATH。建立自己的JavaBean和package時,就放在這個目錄中也不失為一種簡易的方法。
下面介紹一個簡單的JavaBean框架。用文本編輯器創建一個文字檔案helloWorld.java,並保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下,其內容如下:
package test;
public class helloWorld {
public String name = "My first bean";
public String getHi()
{
return "Hello from " + name;
}
}

helloWorld.java編輯好後,在DOS狀態下,進入目錄\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\,用JDK的javac命令編譯helloWorld.java如下:

javac helloWorld.java

注意,Java是區分大小寫的,在程式中,編譯命令行中字母的大小寫都不能寫錯。
編譯成功就表示建立了一個JavaBean。下面看如何在JSP中使用這個JavaBean。用文本編輯器創建一個文字檔案hi-bean.jsp,並保存在\jswdk-1.0.1\webpages\test目錄下,其內容如下:

<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網頁中,使用 <jsp:useBean ... />語法來創建JavaBean物件,並命名為helloBean。讀者可從這個簡單的例子中看出設置、獲取JavaBean屬性,以及調用JavaBean方法的做法。在流覽器的地址欄中鍵入http://localhost:8080/test/hi-bean.jsp,得到結果如圖3所示。
注意,如果修改和重新編譯了JavaBean程式,則需要關閉和重新啟動JSWDK的Web伺服器以後修改的結果才會有效。如果僅僅修改JSP檔,則不用重新啟動JSWDK的Web伺服器。

圖3

雖然,這僅僅完成了一個非常簡單的JavaBean框架,但是遵循這個框架可以設計出多種多樣的JavaBean。例如,從JSP中訪問資料通常就是通過JavaBean來實現的。

七、 資料庫連接
資料庫連接對動態網站來說是最為重要的部分,Java中連接資料庫的技術是JDBC(Java Database Connectivity)。很多資料庫系統帶有JDBC驅動程式,Java程式就通過JDBC驅動程式與資料庫相連,執行查詢、提取資料等等操作。Sun公司還開發了JDBC-ODBC bridge,用此技術Java程式就可以訪問帶有ODBC驅動程式的資料庫,目前大多數資料庫系統都帶有ODBC驅動程式,所以Java程式能訪問諸如Oracle、Sybase、MS SQL Server和MS Access等資料庫。下面介紹如何用Access實現一個動態FAQ(常見問題及答案)網站。
首先建立一個Access資料庫faq.mdb,其中的表faqs有欄位id(自動增量型,並設為主關鍵字)、subject(文字型,長度200)、answers(備註型)。這個表中可以存放一些編程知識的常見問題及答案,如圖4。
圖 4

然後,在Control Panel(控制面板)的ODBC Datasource模組中加入System DSN,取名faq,並指向faq.mdb。
創建一個JavaBean,名為faq.java,並保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下。faq.java 的內容如下:

package test;
import java.sql.*;

public class faq {
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sC;
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;
}
}
用上一節介紹的方法編譯faq.java以後,在\jswdk-1.0.1\webpages\test目錄下創建JSP檔faq.jsp,其內容如下:

<html>
<head>
<meta http-equiv="Content-Type" c>
<title>我的FAQ !</title>
</head>
<body>
<p><b>這是我的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();
%>
在流覽器的地址欄中鍵入http://localhost:8080/test/faq.jsp,faq.jsp調用JavaBean,從資料庫中讀出內容並輸出,得到結果如圖5所示。

圖5

限於篇幅,本文不能列舉JSP-JavaBean-JDBC/ODBC-資料庫的複雜例子,讀者可以從本文最後所推薦的網址中找到並下載到資料庫連接範例。
八、 技術分析
Microsoft 公司的 ASP 技術也是動態網頁開發技術。JSP和ASP從形式上非常相似,ASP程式師一眼就能認出<% %>以及<%= %>。但是深入探究下去會發現它們很多的差別,其中最主要的有以下三點:
1、 JSP的效率和安全性更高
ASP以源碼形式存放,以解釋方式運行,每次ASP網頁調用都需要對源碼進行解釋,運行效率不高。另外,IIS的漏洞曾使得許多網站根源程式大曝光,包括筆者以前用ASP開發的網站,ASP程式全部被人下載了去。
JSP在執行以前先被編譯成位元組碼 (byte code),位元組碼由Java虛擬機(Java Virtual Machine)解釋執行,比源碼解釋的效率高;伺服器上還有位元組碼的Cache機制,能提高位元組碼的訪問效率。第一次調用JSP網頁可能稍慢,因為它被編譯成Cache,以後就快得多了。同時,JSP根源程式不大可能被下載,特別是JavaBean程式完全可以放到不對外的目錄中。
2、 JSP的元件 (Component) 方式更方便
ASP通過COM來擴充複雜的功能,如檔上載、發送email以及將業務處理或者複雜計算分離出來成為獨立可重複利用的模組。JSP通過JavaBean實現了同樣的功能擴充。
在開發方面,COM的開發遠比JavaBean複雜和繁瑣,學會ASP不難,但學會開發COM可不簡單。而JavaBean就簡單多了,從本文上述示例中可以看出開發JavaBean很方便。
在維護方面,COM必須在伺服器上註冊,如果修改了COM程式,就必須重新註冊,甚至必須關機和重新啟動。JavaBean則不需要註冊,放在CLASSPATH包含的目錄中就行了。如果JavaBean進行了修改,則JSWDK和Tomcat現在還需要關閉和重新運行(但不是關機),但開發者已經許諾將在以後的版本中做到不需要關閉伺服器。
另外JavaBean是完全的OOP,可以針對不同的業務處理功能方便地建立一整套可重複利用的物件庫,例如用戶許可權控制、email自動回復等等。
3、 JSP的適應平臺更廣
ASP目前僅適用於NT和IIS。雖然Unix下有ChiliSoft的插件來支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的組合來擴充,Unix下的COM實現起來非常困難。
JSP則不同,幾乎所有平臺都支持Java,JSP+JavaBean可以在所有平臺下通行無阻。NT下IIS通過一個插件,例如JRUN(http://www3.allaire.com/products/jrun/)或者ServletExec(http://www.newatlanta.com/),就能支持JSP。著名的Web伺服器Apache已經能夠支援JSP。由於Apache廣泛應用在NT、Unix和Linux上,因此JSP有更廣泛的運行平臺。雖然現在NT作業系統占了很大的市場份額,但是在伺服器方面Unix的優勢仍然很大,而新崛起的Linux更是來勢不小。
從一個平臺移植到另外一個平臺,JSP和JavaBean甚至不用重新編譯,因為Java位元組碼都是標準的與平臺無關的。筆者將在NT下實驗的JSP網頁原封不動地拿到Linux下就運行起來了,感覺非常滿意。
九、 結論
綜上所述,JSP可謂是構建動態網站的一個利器,故推薦給讀者,祝願你們掌握JSP,開發出優秀的網站。ASP程式師也請試一下,JSP堣]有session、request、response/out等物件,親自試試看如何。

附文
這堿O關於JSP的重要參考資料,有興趣的讀者可以進一步閱讀。
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.html
http://www.zdnet.com/pcweek/stories/news/0,4153,410709,00.html
http://developer.netscape.com/viewsource/kuslich_jsp/kuslich_jsp.html
http://web2.java.sun.com/products/jsp/jsp-asp.html
http://www.asptoday.com/articles/19991022.htm


分享這個話題到你的Facebook

〓中國黑客聯盟(CHU)〓前核心成員,現為榮譽會員
〓中國黑客聯盟(CHU)〓網絡電子雜誌《矩陣》編輯
風堂技術工作室

TOP

 
P幣 1萬可換VIP權限1天為大眾服務,請即加入版主行列千真萬確! P黃金可換港元HKD(2:1)Donate to us