用JSP構(gòu)建動(dòng)態(tài)網(wǎng)站 (3)
發(fā)表時(shí)間:2023-07-30 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]六、 JavaBean JSP網(wǎng)頁(yè)吸引人的地方之一就是能結(jié)合JavaBean技術(shù)來(lái)擴(kuò)充網(wǎng)頁(yè)中程序的功能。 JavaBean是一種Java類 (class),通過(guò)封裝屬性和方法成為具有某種功能...
六、 JavaBean
JSP網(wǎng)頁(yè)吸引人的地方之一就是能結(jié)合JavaBean技術(shù)來(lái)擴(kuò)充網(wǎng)頁(yè)中程序的功能。
JavaBean是一種Java類 (class),通過(guò)封裝屬性和方法成為具有某種功能或者處理某個(gè)業(yè)務(wù)的對(duì)象。JavaBean被組織成為package(數(shù)據(jù)包)以便進(jìn)行管理,實(shí)際上就是把一組JavaBean一起放在某某目錄中,每個(gè)類的定義前加上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時(shí),就放在這個(gè)目錄中也不失為一種簡(jiǎn)易的方法。
下面介紹一個(gè)簡(jiǎn)單的JavaBean框架。用文本編輯器創(chuàng)建一個(gè)文本文件helloWorld.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下,其內(nèi)容如下:
package test;
public class helloWorld {
public String name = "My first bean";
public String getHi()
{
return "Hello from " + name;
}
}
helloWorld.java編輯好后,在DOS狀態(tài)下,進(jìn)入目錄\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\,用JDK的javac命令編譯helloWorld.java如下:
javac helloWorld.java
注意,Java是區(qū)分大小寫的,在程序中,編譯命令行中字母的大小寫都不能寫錯(cuò)。
編譯成功就表示建立了一個(gè)JavaBean。下面看如何在JSP中使用這個(gè)JavaBean。用文本編輯器創(chuàng)建一個(gè)文本文件hi-bean.jsp,并保存在\jswdk-1.0.1\webpages\test目錄下,其內(nèi)容如下:
<html>
<head>
<title>JavaBean 試驗(yàn)</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網(wǎng)頁(yè)中,使用 <jsp:useBean ... />語(yǔ)法來(lái)創(chuàng)建JavaBean對(duì)象,并命名為helloBean。讀者可從這個(gè)簡(jiǎn)單的例子中看出設(shè)置、獲取JavaBean屬性,以及調(diào)用JavaBean方法的做法。在瀏覽器的地址欄中鍵入http://localhost:8080/test/hi-bean.jsp,得到結(jié)果如圖3所示。
注意,如果修改和重新編譯了JavaBean程序,則需要關(guān)閉和重新啟動(dòng)JSWDK的Web服務(wù)器以后修改的結(jié)果才會(huì)有效。如果僅僅修改JSP文件,則不用重新啟動(dòng)JSWDK的Web服務(wù)器.
雖然,這僅僅完成了一個(gè)非常簡(jiǎn)單的JavaBean框架,但是遵循這個(gè)框架可以設(shè)計(jì)出多種多樣的JavaBean。例如,從JSP中訪問(wèn)數(shù)據(jù)通常就是通過(guò)JavaBean來(lái)實(shí)現(xiàn)的。
七、 數(shù)據(jù)庫(kù)連接
數(shù)據(jù)庫(kù)連接對(duì)動(dòng)態(tài)網(wǎng)站來(lái)說(shuō)是最為重要的部分,Java中連接數(shù)據(jù)庫(kù)的技術(shù)是JDBC(Java Database Connectivity)。很多數(shù)據(jù)庫(kù)系統(tǒng)帶有JDBC驅(qū)動(dòng)程序,Java程序就通過(guò)JDBC驅(qū)動(dòng)程序與數(shù)據(jù)庫(kù)相連,執(zhí)行查詢、提取數(shù)據(jù)等等操作。Sun公司還開(kāi)發(fā)了JDBC-ODBC bridge,用此技術(shù)Java程序就可以訪問(wèn)帶有ODBC驅(qū)動(dòng)程序的數(shù)據(jù)庫(kù),目前大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都帶有ODBC驅(qū)動(dòng)程序,所以Java程序能訪問(wèn)諸如Oracle、Sybase、MS SQL Server和MS Access等數(shù)據(jù)庫(kù)。下面介紹如何用Access實(shí)現(xiàn)一個(gè)動(dòng)態(tài)FAQ(常見(jiàn)問(wèn)題及答案)網(wǎng)站。
首先建立一個(gè)Access數(shù)據(jù)庫(kù)faq.mdb,其中的表faqs有字段id(自動(dòng)增量型,并設(shè)為主關(guān)鍵字)、subject(文字型,長(zhǎng)度200)、answers(備注型)。這個(gè)表中可以存放一些編程知識(shí)的常見(jiàn)問(wèn)題及答案。
然后,在Control Panel(控制面板)的ODBC Datasource模塊中加入System DSN,取名faq,并指向faq.mdb。
創(chuàng)建一個(gè)JavaBean,名為faq.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目錄下。faq.java 的內(nèi)容如下:
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();
%>
在瀏覽器的地址欄中鍵入http://localhost:8080/test/faq.jsp,faq.jsp調(diào)用JavaBean,從數(shù)據(jù)庫(kù)中讀出內(nèi)容并輸出。
限于篇幅,本文不能列舉JSP-JavaBean-JDBC/ODBC-數(shù)據(jù)庫(kù)的復(fù)雜例子,讀者可以從本文最后所推薦的網(wǎng)址中找到并下載到數(shù)據(jù)庫(kù)連接范例。