1、引言
??? 隨著Internet的快速發展,在網站建設中使用數據庫已必不可少。基于Java語言的JSP、Servlet、JavaBean通過JDBC技術可以方便的訪問數據庫,生成動態網頁" title="動態網頁">動態網頁。本文首先介紹了JSP、Servlet、JavaBean、JDBC技術,分析了在網站建設中通過JDBC對數據庫進行訪問的原理和方法。在此基礎上,提出了一個建設動態Web網站的模型。
2、主要技術簡介
2.1 Servlet
??? Servlet是運行在服務器端的Java應用程序" title="應用程序">應用程序,用戶可以用瀏覽器通過URL來調用Servlet程序。開發者可以自由地選擇Web服務器、開發平臺和工具。Servlet是基于線程的,可用多線程機制同時為多個請求服務,保證了高效率運行。用Servlet輸出HTML代碼如下:
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“#Servlet ”);
out.println(“”);
out.println(“Hello World”);
out.println(“”);
out.close();
2.2 JSP
??? JSP使用類似于XML的標簽和用Java語言編寫的腳本程序來封裝產生頁面內容的邏輯。從上節可見,用Servlet輸出HTML語言很不方便。而JSP可以嵌入HTML中,把用戶界面和頁面內容分開,設計者可以不更改內容而修改頁面風格,方便的開發和維護動態網頁。首次訪問JSP文件時,JSP引擎把JSP源代碼轉變成Servlet代碼,再編譯成class文件,由Java虛擬機(JVM)解釋執行。同一JSP網頁再被請求時, Web服務器就直接執行已編譯的程序。
??? JSP包括很多內置的服務器和應用程序構建對象:GET/POST請求的參數的客戶端" title="客戶端">客戶端請求Request;網頁傳回客戶端的響應response;管理網頁的屬性pageContext;與請求有關的會話期session;正在執行的內容application;用來傳送響應的輸出流out;servlet的架構對象config;網頁本身page;針對錯誤網頁的exception等等。這些對象讓開發者擺脫許多繁瑣的具體工作。
2.3 JavaBean
??? JavaBean(簡稱Bean)是一種基于Java的可重用組件,用來執行復雜的計算任務、或負責與數據庫的交互。JavaBean有五個特性:支持內省、支持定制、支持事件、支持屬性、支持持續。有page(網頁)、request(響應)、session(會話)、application(應用程序)4種不同的生命周期。
2.4 JDBC
??? JDBC(Java Database Connectivity)是Java連接數據庫" title="連接數據庫">連接數據庫的工業標準,為基于SQL的數據庫訪問提供調用級應用編程接口" title="編程接口">編程接口。JDBC包括兩組分別面向應用程序和數據庫驅動程序開發人員的API,以及將前者向后者轉化的內在封裝邏輯。
面向數據庫驅動程序開發人員的JDBC Driver API,是由數據庫廠商開發的。提供給開發人員用來編寫前端應用程序的JDBC API,對任何數據庫都是一樣的。用戶使用標準的SQL語句進行查詢,查詢語句經驅動程序管理器處理,變成適應于特定數據庫的查詢語言,然后向下傳遞給相應的驅動程序,再由驅動程序與數據庫管理系統進行通信,實現數據庫的讀取和操作。由于JDBC具有平臺無關性和數據庫訪問一致性兩大優點,開發人員編寫的程序只需稍作改動就可以在不同的平臺上訪問不同的數據庫系統。
??? JDBC驅動程序有以下4類:
(a)JDBC-ODBC橋,將JDBC調用轉化為ODBC(Open Database Connectivity)調用的“橋梁”,通過ODBC驅動程序來提供JDBC對數據庫的訪問。
(b)本機應用編程接口部分Java驅動程序(Native-API Partly-Java Driver),將JDBC調用轉換為基于客戶端API的調用。
(c)數據庫中間件的純Java驅動程序(Net-Protocol All-Java Driver),將JDBC調用轉換成為中間件供應商的協議,然后通過中間件服務器將該協議轉換為DBMS協議。
(d)直接連接數據庫的純Java驅動程序(Native-Protocol All-Java Driver),將JDBC調用轉換為特定數據庫直接使用的網絡協議,這一類驅動程序通常由數據庫廠商自己開發。
3.實現數據庫的訪問
3.1 使用JDBC實現數據庫訪問的一般步驟
(a)加載驅動程序,例如加載Oracle數據庫的驅動程序:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
(b)建立連接:
Connection con=DriverManager.getConection(Url,“user”,“Password”);Url是數據庫的統一資源地址,格式如下:jdbc:子協議名:附加信息。user是用戶名,password是口令。
(c)對數據庫進行操作,例如進行查詢并返回結果集:
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“SELECT *? FROM DBName”);
當然,也可以執行插入、更新、刪除等SQL語句。
3.2 在Servlet、JSP、JavaBean中實現數據庫訪問
Servlet和JavaBean可以象其他Java程序一樣,直接調用JDBC實現數據庫的訪問。在JSP中可以直接加入數據庫訪問語句。例如實現數據的插入:
<%@page contentType="text/html; charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>
插入數據
<%String name=null;name=request.getParameter("name");
?if(name==null)
{%>
<%}
else
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con=DriverManager.getConnection("jdbc:oracle:thin:@"+Server+":"+"1521"+":"+dbName,UserID,UserPWD);
Statement stmt=conn.createStatement();
stmt.executeUpdate("insert into table(name) values(`"+name+")");
out.println("數據插入成功!");
stmt.close();conn.close();
}%>
??? JSP對于在Web應用中集成JavaBean組件提供了完善的支持,這種支持不僅能縮短開發時間,避免重復開發,也為JSP應用帶來了更多的可伸縮性,因此更好的方法是利用JavaBean實現數據庫訪問:
?(a) Bean類源文件的建立。
Bean對象文件名為Db.java,程序代碼如下:
package sample;
import java.io.*;import javax.servlet.http.*;import java.sql.*;
pulic class Db {
private Connection con=null;
public void Db(){}
private void BulidConnection(){
try{
??????? DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con=DriverManager.getConnection("jdbc:oracle:thin:@"+Server+":"+"1521"+":"+dbName,UserID,UserPWD);
catch(Exceptionex) {System.out.println(ex.getMessage());} }
public Connection getConnection()
{ if(con==null)? BulidConnection();
Return con;}
Public void close(){
try{ con.close();con=null;}
catch(SQLException ex){ ex.printStackTrace();} }
?(b) 將上面的文件編譯生成Db.class文件。在JSP文件中使用〈jsp:useBean〉標記來調用Bean。〈jsp:useBean〉標記用“id”屬性識別Bean,“class”屬性查找Bean,“scope”屬性確定范圍。本例中,在Bean中將對象存入session中,用以下代碼可調用Db.class:
〈jsp:useBean id=“db”scope=“session”class=“sample.Db”/〉
??? 此例只是使用Bean實現了連接數據庫的操作,實際應用中可以使用Bean把常用的數據庫功能都封裝起來。這樣不僅隱藏了許多復雜的操作,避免了在JSP文件中重復數據庫訪問代碼。而且,Bean是編譯為字節碼存放的,數據庫訪問密碼、用戶名對于使用它的人來說是不可見的。
4.一個基于Java技術的網站模型
??? 目前,網站基本都采取B/S(瀏覽器/服務器)三層結構,即用戶界面表示層、邏輯處理層、數據存儲層。本文給出的采用Java技術的動態網站模型如下:Web服務器采用Apache,JSP引擎選用Tomcat,后臺數據庫采用Oracle數據庫,JDBC數據庫驅動程序選用Oracle提供的JDBC驅動程序。該模型用HTML設計用戶界面,Servlet負責處理HTTP請求,完成具體處理流程的控制,JavaBean中封裝訪問數據庫的邏輯,通過JDBC訪問數據庫,JSP負責將由JavaBean傳回的數據用動態網頁顯示。這樣可以將網頁內容生成(業務邏輯)和內容顯示(HTML)分離開,使結構更加清晰。圖1顯示了模型的體系結構。
??? 隨著Internet的快速發展,在網站建設中使用數據庫已必不可少。基于Java語言的JSP、Servlet、JavaBean通過JDBC技術可以方便的訪問數據庫,生成動態網頁" title="動態網頁">動態網頁。本文首先介紹了JSP、Servlet、JavaBean、JDBC技術,分析了在網站建設中通過JDBC對數據庫進行訪問的原理和方法。在此基礎上,提出了一個建設動態Web網站的模型。
2、主要技術簡介
2.1 Servlet
??? Servlet是運行在服務器端的Java應用程序" title="應用程序">應用程序,用戶可以用瀏覽器通過URL來調用Servlet程序。開發者可以自由地選擇Web服務器、開發平臺和工具。Servlet是基于線程的,可用多線程機制同時為多個請求服務,保證了高效率運行。用Servlet輸出HTML代碼如下:
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“
out.println(“”);
out.println(“Hello World”);
out.println(“”);
out.close();
2.2 JSP
??? JSP使用類似于XML的標簽和用Java語言編寫的腳本程序來封裝產生頁面內容的邏輯。從上節可見,用Servlet輸出HTML語言很不方便。而JSP可以嵌入HTML中,把用戶界面和頁面內容分開,設計者可以不更改內容而修改頁面風格,方便的開發和維護動態網頁。首次訪問JSP文件時,JSP引擎把JSP源代碼轉變成Servlet代碼,再編譯成class文件,由Java虛擬機(JVM)解釋執行。同一JSP網頁再被請求時, Web服務器就直接執行已編譯的程序。
??? JSP包括很多內置的服務器和應用程序構建對象:GET/POST請求的參數的客戶端" title="客戶端">客戶端請求Request;網頁傳回客戶端的響應response;管理網頁的屬性pageContext;與請求有關的會話期session;正在執行的內容application;用來傳送響應的輸出流out;servlet的架構對象config;網頁本身page;針對錯誤網頁的exception等等。這些對象讓開發者擺脫許多繁瑣的具體工作。
2.3 JavaBean
??? JavaBean(簡稱Bean)是一種基于Java的可重用組件,用來執行復雜的計算任務、或負責與數據庫的交互。JavaBean有五個特性:支持內省、支持定制、支持事件、支持屬性、支持持續。有page(網頁)、request(響應)、session(會話)、application(應用程序)4種不同的生命周期。
2.4 JDBC
??? JDBC(Java Database Connectivity)是Java連接數據庫" title="連接數據庫">連接數據庫的工業標準,為基于SQL的數據庫訪問提供調用級應用編程接口" title="編程接口">編程接口。JDBC包括兩組分別面向應用程序和數據庫驅動程序開發人員的API,以及將前者向后者轉化的內在封裝邏輯。
面向數據庫驅動程序開發人員的JDBC Driver API,是由數據庫廠商開發的。提供給開發人員用來編寫前端應用程序的JDBC API,對任何數據庫都是一樣的。用戶使用標準的SQL語句進行查詢,查詢語句經驅動程序管理器處理,變成適應于特定數據庫的查詢語言,然后向下傳遞給相應的驅動程序,再由驅動程序與數據庫管理系統進行通信,實現數據庫的讀取和操作。由于JDBC具有平臺無關性和數據庫訪問一致性兩大優點,開發人員編寫的程序只需稍作改動就可以在不同的平臺上訪問不同的數據庫系統。
??? JDBC驅動程序有以下4類:
(a)JDBC-ODBC橋,將JDBC調用轉化為ODBC(Open Database Connectivity)調用的“橋梁”,通過ODBC驅動程序來提供JDBC對數據庫的訪問。
(b)本機應用編程接口部分Java驅動程序(Native-API Partly-Java Driver),將JDBC調用轉換為基于客戶端API的調用。
(c)數據庫中間件的純Java驅動程序(Net-Protocol All-Java Driver),將JDBC調用轉換成為中間件供應商的協議,然后通過中間件服務器將該協議轉換為DBMS協議。
(d)直接連接數據庫的純Java驅動程序(Native-Protocol All-Java Driver),將JDBC調用轉換為特定數據庫直接使用的網絡協議,這一類驅動程序通常由數據庫廠商自己開發。
3.實現數據庫的訪問
3.1 使用JDBC實現數據庫訪問的一般步驟
(a)加載驅動程序,例如加載Oracle數據庫的驅動程序:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
(b)建立連接:
Connection con=DriverManager.getConection(Url,“user”,“Password”);Url是數據庫的統一資源地址,格式如下:jdbc:子協議名:附加信息。user是用戶名,password是口令。
(c)對數據庫進行操作,例如進行查詢并返回結果集:
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“SELECT *? FROM DBName”);
當然,也可以執行插入、更新、刪除等SQL語句。
3.2 在Servlet、JSP、JavaBean中實現數據庫訪問
Servlet和JavaBean可以象其他Java程序一樣,直接調用JDBC實現數據庫的訪問。在JSP中可以直接加入數據庫訪問語句。例如實現數據的插入:
<%@page contentType="text/html; charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>
<%String name=null;name=request.getParameter("name");
?if(name==null)
{%>
<%}
else
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con=DriverManager.getConnection("jdbc:oracle:thin:@"+Server+":"+"1521"+":"+dbName,UserID,UserPWD);
Statement stmt=conn.createStatement();
stmt.executeUpdate("insert into table(name) values(`"+name+")");
out.println("數據插入成功!");
stmt.close();conn.close();
}%>
??? JSP對于在Web應用中集成JavaBean組件提供了完善的支持,這種支持不僅能縮短開發時間,避免重復開發,也為JSP應用帶來了更多的可伸縮性,因此更好的方法是利用JavaBean實現數據庫訪問:
?(a) Bean類源文件的建立。
Bean對象文件名為Db.java,程序代碼如下:
package sample;
import java.io.*;import javax.servlet.http.*;import java.sql.*;
pulic class Db {
private Connection con=null;
public void Db(){}
private void BulidConnection(){
try{
??????? DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con=DriverManager.getConnection("jdbc:oracle:thin:@"+Server+":"+"1521"+":"+dbName,UserID,UserPWD);
catch(Exceptionex) {System.out.println(ex.getMessage());} }
public Connection getConnection()
{ if(con==null)? BulidConnection();
Return con;}
Public void close(){
try{ con.close();con=null;}
catch(SQLException ex){ ex.printStackTrace();} }
?(b) 將上面的文件編譯生成Db.class文件。在JSP文件中使用〈jsp:useBean〉標記來調用Bean。〈jsp:useBean〉標記用“id”屬性識別Bean,“class”屬性查找Bean,“scope”屬性確定范圍。本例中,在Bean中將對象存入session中,用以下代碼可調用Db.class:
〈jsp:useBean id=“db”scope=“session”class=“sample.Db”/〉
??? 此例只是使用Bean實現了連接數據庫的操作,實際應用中可以使用Bean把常用的數據庫功能都封裝起來。這樣不僅隱藏了許多復雜的操作,避免了在JSP文件中重復數據庫訪問代碼。而且,Bean是編譯為字節碼存放的,數據庫訪問密碼、用戶名對于使用它的人來說是不可見的。
4.一個基于Java技術的網站模型
??? 目前,網站基本都采取B/S(瀏覽器/服務器)三層結構,即用戶界面表示層、邏輯處理層、數據存儲層。本文給出的采用Java技術的動態網站模型如下:Web服務器采用Apache,JSP引擎選用Tomcat,后臺數據庫采用Oracle數據庫,JDBC數據庫驅動程序選用Oracle提供的JDBC驅動程序。該模型用HTML設計用戶界面,Servlet負責處理HTTP請求,完成具體處理流程的控制,JavaBean中封裝訪問數據庫的邏輯,通過JDBC訪問數據庫,JSP負責將由JavaBean傳回的數據用動態網頁顯示。這樣可以將網頁內容生成(業務邏輯)和內容顯示(HTML)分離開,使結構更加清晰。圖1顯示了模型的體系結構。

?
5.結束語
??? 隨著Internet的不斷發展,Web站點中對數據庫的應用越來越多。Jsp 、Servlet、JavaBean通過調用JDBC可以方便的訪問數據庫,加之其動態、高效、簡潔與平臺無關等特點,對動態Web應用的開發,提供了良好的支持。本文介紹了Servlet、Jsp、JavaBean通過JDBC訪問數據庫的原理和方法,并在此基礎上,提出了一個構建動態Web網站的模型。
參考文獻:
1 陳海山.深入Java Servlet網絡編程.清華大學出版社,
2?張金濤.基于Linux的Apache+JSP+Oracle.清華大學出版社,
3?Danny Ayers,John Bell,Carl CalvertBettis等著,戴英,張曉暉,王輝等譯.Java數據庫編程指南.電子工業出版社,
4?李肅義,李洋. 在JSP中使用JavaBean連接數據庫.吉林大學學報(信息科學版),第20卷第3期,2002年8月,Vol.20 No.3
5?范新民. 基于JSP、JDBC技術動態訪問Web數據庫的實現方案. 福建師范大學學報(自然科學版),第18卷第2期,2002年6月,Vol.18 No.2
本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
