?? jspd.htm
字號:
<P>六、 JavaBean
<P>JSP網(wǎng)頁吸引人的地方之一就是能結(jié)合JavaBean技術(shù)來擴充網(wǎng)頁中程序的功能。 JavaBean是一種Java類
(class),通過封裝屬性和方法成為具有某種功能或者處理某個業(yè)務(wù)的對象。JavaBean被組織成為package(數(shù)據(jù)包)以便進行管理,實際上就是把一組JavaBean一起放在某某目錄中,每個類的定義前加上package某某,本例中為test。目錄test必須放在系統(tǒng)環(huán)境CLASSPATH包含的目錄下,系統(tǒng)才能找到其中的JavaBean。JSWDK在缺省狀態(tài)下將\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\
加入CLASSPATH。建立自己的JavaBean和package時,就放在這個目錄中也不失為一種簡易的方法。
<BR>下面介紹一個簡單的JavaBean框架。用文本編輯器創(chuàng)建一個文本文件helloWorld.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下,其內(nèi)容如下:
<PRE><CODE>
package test;
public class helloWorld {
public String name = "My first bean";
public String getHi()
{
return "Hello from " + name;
}
}
</CODE> </PRE><BR>helloWorld.java編輯好后,在DOS狀態(tài)下,進入目錄\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\,用JDK的javac命令編譯helloWorld.java如下:
<BR>javac helloWorld.java
<BR>注意,Java是區(qū)分大小寫的,在程序中,編譯命令行中字母的大小寫都不能寫錯。編譯成功就表示建立了一個JavaBean。下面看如何在JSP中使用這個JavaBean。用文本編輯器創(chuàng)建一個文本文件hi-bean.jsp,并保存在\jswdk-1.0.1\webpages\test目錄下,其內(nèi)容如下:
<PRE><CODE>
〈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>
</CODE> </PRE><BR>在JSP網(wǎng)頁中,使用 〈jsp:useBean ...
/>語法來創(chuàng)建JavaBean對象,并命名為helloBean。讀者可從這個簡單的例子中看出設(shè)置、獲取JavaBean屬性,以及調(diào)用JavaBean方法的做法。在瀏覽器的地址欄中鍵入http://localhost:8080/test/hi-bean.jsp,得到結(jié)果如圖3所示。注意,如果修改和重新編譯了JavaBean程序,則需要關(guān)閉和重新啟動JSWDK的Web服務(wù)器以后修改的結(jié)果才會有效。如果僅僅修改JSP文件,則不用重新啟動JSWDK的Web服務(wù)器。
<BR>雖然,這僅僅完成了一個非常簡單的JavaBean框架,但是遵循這個框架可以設(shè)計出多種多樣的JavaBean。例如,從JSP中訪問數(shù)據(jù)通常就是通過JavaBean來實現(xiàn)的。
<P>七、 數(shù)據(jù)庫連接
<P>數(shù)據(jù)庫連接對動態(tài)網(wǎng)站來說是最為重要的部分,Java中連接數(shù)據(jù)庫的技術(shù)是JDBC(Java Database
Connectivity)。很多數(shù)據(jù)庫系統(tǒng)帶有JDBC驅(qū)動程序,Java程序就通過JDBC驅(qū)動程序與數(shù)據(jù)庫相連,執(zhí)行查詢、提取數(shù)據(jù)等等操作。Sun公司還開發(fā)了JDBC-ODBC
bridge,用此技術(shù)Java程序就可以訪問帶有ODBC驅(qū)動程序的數(shù)據(jù)庫,目前大多數(shù)數(shù)據(jù)庫系統(tǒng)都帶有ODBC驅(qū)動程序,所以Java程序能訪問諸如Oracle、Sybase、MS
SQL Server和MS
Access等數(shù)據(jù)庫。下面介紹如何用Access實現(xiàn)一個動態(tài)FAQ(常見問題及答案)網(wǎng)站。首先建立一個Access數(shù)據(jù)庫faq.mdb,其中的表faqs有字段id(自動增量型,并設(shè)為主關(guān)鍵字)、subject(文字型,長度200)、answers(備注型)。這個表中可以存放一些編程知識的常見問題及答案,
<BR>然后,在Control Panel(控制面板)的ODBC Datasource模塊中加入System
DSN,取名faq,并指向faq.mdb。
創(chuàng)建一個JavaBean,名為faq.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下。faq.java
的內(nèi)容如下: <PRE><CODE>
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;
}
}
用上一節(jié)介紹的方法編譯faq.java以后,在\jswdk-1.0.1\webpages\test目錄下創(chuàng)建JSP文件faq.jsp,其內(nèi)容如下:
〈html>
〈head>
〈meta http-equiv="Content-Type" content="text/html; charset=gb2312">
〈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();
%>
</CODE> </PRE><BR>在瀏覽器的地址欄中鍵入http://localhost:8080/test/faq.jsp,faq.jsp調(diào)用JavaBean,從數(shù)據(jù)庫中讀出內(nèi)容并輸出.
<BR>限于篇幅,本文不能列舉JSP-JavaBean-JDBC/ODBC-數(shù)據(jù)庫的復(fù)雜例子,讀者可以從本文最后所推薦的網(wǎng)址中找到并下載到數(shù)據(jù)庫連接范例。
<P>八、 技術(shù)分析 <BR>Microsoft 公司的 ASP
技術(shù)也是動態(tài)網(wǎng)頁開發(fā)技術(shù)。JSP和ASP從形式上非常相似,ASP程序員一眼就能認出〈% %>以及〈%=
%>。但是深入探究下去會發(fā)現(xiàn)它們很多的差別,其中最主要的有以下三點:
<P>1、 JSP的效率和安全性更高
<BR>ASP以源碼形式存放,以解釋方式運行,每次ASP網(wǎng)頁調(diào)用都需要對源碼進行解釋,運行效率不高。另外,IIS的漏洞曾使得許多網(wǎng)站源程序大曝光,包括筆者以前用ASP開發(fā)的網(wǎng)站,ASP程序全部被人下載了去。
<BR>JSP在執(zhí)行以前先被編譯成字節(jié)碼 (byte code),字節(jié)碼由Java虛擬機(Java Virtual
Machine)解釋執(zhí)行,比源碼解釋的效率高;服務(wù)器上還有字節(jié)碼的Cache機制,能提高字節(jié)碼的訪問效率。第一次調(diào)用JSP網(wǎng)頁可能稍慢,因為它被編譯成Cache,以后就快得多了。同時,JSP源程序不大可能被下載,特別是JavaBean程序完全可以放到不對外的目錄中。
<P>2、 JSP的組件 (Component) 方式更方便
<BR>ASP通過COM來擴充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù)處理或者復(fù)雜計算分離出來成為獨立可重復(fù)利用的模塊。JSP通過JavaBean實現(xiàn)了同樣的功能擴充。
<BR>在開發(fā)方面,COM的開發(fā)遠比JavaBean復(fù)雜和繁瑣,學(xué)會ASP不難,但學(xué)會開發(fā)COM可不簡單。而JavaBean就簡單多了,從本文上述示例中可以看出開發(fā)JavaBean很方便。
<BR>在維護方面,COM必須在服務(wù)器上注冊,如果修改了COM程序,就必須重新注冊,甚至必須關(guān)機和重新啟動。JavaBean則不需要注冊,放在CLASSPATH包含的目錄中就行了。如果JavaBean進行了修改,則JSWDK和Tomcat現(xiàn)在還需要關(guān)閉和重新運行(但不是關(guān)機),但開發(fā)者已經(jīng)許諾將在以后的版本中做到不需要關(guān)閉服務(wù)器。
<BR>另外JavaBean是完全的OOP,可以針對不同的業(yè)務(wù)處理功能方便地建立一整套可重復(fù)利用的對象庫,例如用戶權(quán)限控制、email自動回復(fù)等等。
<P>3、 JSP的適應(yīng)平臺更廣
<BR>ASP目前僅適用于NT和IIS。雖然Unix下有ChiliSoft的插件來支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的組合來擴充,Unix下的COM實現(xiàn)起來非常困難。
<BR>JSP則不同,幾乎所有平臺都支持Java,JSP+JavaBean可以在所有平臺下通行無阻。NT下IIS通過一個插件,例如JRUN(http://www3.allaire.com/products/jrun/)或者ServletExec(http://www.newatlanta.com/),就能支持JSP。著名的Web服務(wù)器Apache已經(jīng)能夠支持JSP。由于Apache廣泛應(yīng)用在NT、Unix和Linux上,因此JSP有更廣泛的運行平臺。雖然現(xiàn)在NT操作系統(tǒng)占了很大的市場份額,但是在服務(wù)器方面Unix的優(yōu)勢仍然很大,而新崛起的Linux更是來勢不小。
<BR>從一個平臺移植到另外一個平臺,JSP和JavaBean甚至不用重新編譯,因為Java字節(jié)碼都是標準的與平臺無關(guān)的。筆者將在NT下實驗的JSP網(wǎng)頁原封不動地拿到Linux下就運行起來了,感覺非常滿意。
<P>九、 結(jié)論
<BR>綜上所述,JSP可謂是構(gòu)建動態(tài)網(wǎng)站的一個利器,故推薦給讀者,祝愿你們掌握JSP,開發(fā)出優(yōu)秀的網(wǎng)站。ASP程序員也請試一下,JSP里也有session、request、response/out等對象,親自試試看如何。
<PRE><CODE>
附文
這里是關(guān)于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
</CODE></PRE>
<P></P></TD></TR>
<TR>
<TD class=page>
<TABLE border=0 width="100%">
<TBODY>
<TR>
<TD align=middle><A
href="http://go.163.com/~netjava/war.html">目錄</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -