《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 业界动态 > 基于Java的数据库Web访问技术

基于Java的数据库Web访问技术

2008-12-22
作者:方昭辉 陈冬霞
1、引言
??? 隨著Internet的快速發(fā)展,在網(wǎng)站建設(shè)中使用數(shù)據(jù)庫已必不可少?;贘ava語言的JSP、Servlet、JavaBean通過JDBC技術(shù)可以方便的訪問數(shù)據(jù)庫,生成動態(tài)網(wǎng)頁" title="動態(tài)網(wǎng)頁">動態(tài)網(wǎng)頁。本文首先介紹了JSP、Servlet、JavaBean、JDBC技術(shù),分析了在網(wǎng)站建設(shè)中通過JDBC對數(shù)據(jù)庫進行訪問的原理和方法。在此基礎(chǔ)上,提出了一個建設(shè)動態(tài)Web網(wǎng)站的模型。
2、主要技術(shù)簡介
2.1 Servlet

??? Servlet是運行在服務(wù)器端的Java應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序,用戶可以用瀏覽器通過URL來調(diào)用Servlet程序。開發(fā)者可以自由地選擇Web服務(wù)器、開發(fā)平臺和工具。Servlet是基于線程的,可用多線程機制同時為多個請求服務(wù),保證了高效率運行。用Servlet輸出HTML代碼如下:
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“#Servlet</head>”);
out.println(“”);
out.println(“Hello World”);
out.println(“”);
out.close();
2.2 JSP
??? JSP使用類似于XML的標(biāo)簽和用Java語言編寫的腳本程序來封裝產(chǎn)生頁面內(nèi)容的邏輯。從上節(jié)可見,用Servlet輸出HTML語言很不方便。而JSP可以嵌入HTML中,把用戶界面和頁面內(nèi)容分開,設(shè)計者可以不更改內(nèi)容而修改頁面風(fēng)格,方便的開發(fā)和維護動態(tài)網(wǎng)頁。首次訪問JSP文件時,JSP引擎把JSP源代碼轉(zhuǎn)變成Servlet代碼,再編譯成class文件,由Java虛擬機(JVM)解釋執(zhí)行。同一JSP網(wǎng)頁再被請求時, Web服務(wù)器就直接執(zhí)行已編譯的程序。
??? JSP包括很多內(nèi)置的服務(wù)器和應(yīng)用程序構(gòu)建對象:GET/POST請求的參數(shù)的客戶端" title="客戶端">客戶端請求Request;網(wǎng)頁傳回客戶端的響應(yīng)response;管理網(wǎng)頁的屬性pageContext;與請求有關(guān)的會話期session;正在執(zhí)行的內(nèi)容application;用來傳送響應(yīng)的輸出流out;servlet的架構(gòu)對象config;網(wǎng)頁本身page;針對錯誤網(wǎng)頁的exception等等。這些對象讓開發(fā)者擺脫許多繁瑣的具體工作。
2.3 JavaBean
??? JavaBean(簡稱Bean)是一種基于Java的可重用組件,用來執(zhí)行復(fù)雜的計算任務(wù)、或負責(zé)與數(shù)據(jù)庫的交互。JavaBean有五個特性:支持內(nèi)省、支持定制、支持事件、支持屬性、支持持續(xù)。有page(網(wǎng)頁)、request(響應(yīng))、session(會話)、application(應(yīng)用程序)4種不同的生命周期。
2.4 JDBC
??? JDBC(Java Database Connectivity)是Java連接數(shù)據(jù)庫" title="連接數(shù)據(jù)庫">連接數(shù)據(jù)庫的工業(yè)標(biāo)準(zhǔn),為基于SQL的數(shù)據(jù)庫訪問提供調(diào)用級應(yīng)用編程接口" title="編程接口">編程接口。JDBC包括兩組分別面向應(yīng)用程序和數(shù)據(jù)庫驅(qū)動程序開發(fā)人員的API,以及將前者向后者轉(zhuǎn)化的內(nèi)在封裝邏輯。
面向數(shù)據(jù)庫驅(qū)動程序開發(fā)人員的JDBC Driver API,是由數(shù)據(jù)庫廠商開發(fā)的。提供給開發(fā)人員用來編寫前端應(yīng)用程序的JDBC API,對任何數(shù)據(jù)庫都是一樣的。用戶使用標(biāo)準(zhǔn)的SQL語句進行查詢,查詢語句經(jīng)驅(qū)動程序管理器處理,變成適應(yīng)于特定數(shù)據(jù)庫的查詢語言,然后向下傳遞給相應(yīng)的驅(qū)動程序,再由驅(qū)動程序與數(shù)據(jù)庫管理系統(tǒng)進行通信,實現(xiàn)數(shù)據(jù)庫的讀取和操作。由于JDBC具有平臺無關(guān)性和數(shù)據(jù)庫訪問一致性兩大優(yōu)點,開發(fā)人員編寫的程序只需稍作改動就可以在不同的平臺上訪問不同的數(shù)據(jù)庫系統(tǒng)。
??? JDBC驅(qū)動程序有以下4類:
(a)JDBC-ODBC橋,將JDBC調(diào)用轉(zhuǎn)化為ODBC(Open Database Connectivity)調(diào)用的“橋梁”,通過ODBC驅(qū)動程序來提供JDBC對數(shù)據(jù)庫的訪問。
(b)本機應(yīng)用編程接口部分Java驅(qū)動程序(Native-API Partly-Java Driver),將JDBC調(diào)用轉(zhuǎn)換為基于客戶端API的調(diào)用。
(c)數(shù)據(jù)庫中間件的純Java驅(qū)動程序(Net-Protocol All-Java Driver),將JDBC調(diào)用轉(zhuǎn)換成為中間件供應(yīng)商的協(xié)議,然后通過中間件服務(wù)器將該協(xié)議轉(zhuǎn)換為DBMS協(xié)議。
(d)直接連接數(shù)據(jù)庫的純Java驅(qū)動程序(Native-Protocol All-Java Driver),將JDBC調(diào)用轉(zhuǎn)換為特定數(shù)據(jù)庫直接使用的網(wǎng)絡(luò)協(xié)議,這一類驅(qū)動程序通常由數(shù)據(jù)庫廠商自己開發(fā)。
3.實現(xiàn)數(shù)據(jù)庫的訪問
3.1 使用JDBC實現(xiàn)數(shù)據(jù)庫訪問的一般步驟
(a)加載驅(qū)動程序,例如加載Oracle數(shù)據(jù)庫的驅(qū)動程序:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
(b)建立連接:
Connection con=DriverManager.getConection(Url,“user”,“Password”);Url是數(shù)據(jù)庫的統(tǒng)一資源地址,格式如下:jdbc:子協(xié)議名:附加信息。user是用戶名,password是口令。
(c)對數(shù)據(jù)庫進行操作,例如進行查詢并返回結(jié)果集:
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“SELECT *? FROM DBName”);
當(dāng)然,也可以執(zhí)行插入、更新、刪除等SQL語句。
3.2 在Servlet、JSP、JavaBean中實現(xiàn)數(shù)據(jù)庫訪問
Servlet和JavaBean可以象其他Java程序一樣,直接調(diào)用JDBC實現(xiàn)數(shù)據(jù)庫的訪問。在JSP中可以直接加入數(shù)據(jù)庫訪問語句。例如實現(xiàn)數(shù)據(jù)的插入:
<%@page contentType="text/html; charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>

插入數(shù)據(jù)


<%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("數(shù)據(jù)插入成功!");
stmt.close();conn.close();
}%>


??? JSP對于在Web應(yīng)用中集成JavaBean組件提供了完善的支持,這種支持不僅能縮短開發(fā)時間,避免重復(fù)開發(fā),也為JSP應(yīng)用帶來了更多的可伸縮性,因此更好的方法是利用JavaBean實現(xiàn)數(shù)據(jù)庫訪問:
?(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〉標(biāo)記來調(diào)用Bean?!磈sp:useBean〉標(biāo)記用“id”屬性識別Bean,“class”屬性查找Bean,“scope”屬性確定范圍。本例中,在Bean中將對象存入session中,用以下代碼可調(diào)用Db.class:
〈jsp:useBean id=“db”scope=“session”class=“sample.Db”/〉
??? 此例只是使用Bean實現(xiàn)了連接數(shù)據(jù)庫的操作,實際應(yīng)用中可以使用Bean把常用的數(shù)據(jù)庫功能都封裝起來。這樣不僅隱藏了許多復(fù)雜的操作,避免了在JSP文件中重復(fù)數(shù)據(jù)庫訪問代碼。而且,Bean是編譯為字節(jié)碼存放的,數(shù)據(jù)庫訪問密碼、用戶名對于使用它的人來說是不可見的。
4.一個基于Java技術(shù)的網(wǎng)站模型
??? 目前,網(wǎng)站基本都采取B/S(瀏覽器/服務(wù)器)三層結(jié)構(gòu),即用戶界面表示層、邏輯處理層、數(shù)據(jù)存儲層。本文給出的采用Java技術(shù)的動態(tài)網(wǎng)站模型如下:Web服務(wù)器采用Apache,JSP引擎選用Tomcat,后臺數(shù)據(jù)庫采用Oracle數(shù)據(jù)庫,JDBC數(shù)據(jù)庫驅(qū)動程序選用Oracle提供的JDBC驅(qū)動程序。該模型用HTML設(shè)計用戶界面,Servlet負責(zé)處理HTTP請求,完成具體處理流程的控制,JavaBean中封裝訪問數(shù)據(jù)庫的邏輯,通過JDBC訪問數(shù)據(jù)庫,JSP負責(zé)將由JavaBean傳回的數(shù)據(jù)用動態(tài)網(wǎng)頁顯示。這樣可以將網(wǎng)頁內(nèi)容生成(業(yè)務(wù)邏輯)和內(nèi)容顯示(HTML)分離開,使結(jié)構(gòu)更加清晰。圖1顯示了模型的體系結(jié)構(gòu)。

?

5.結(jié)束語
??? 隨著Internet的不斷發(fā)展,Web站點中對數(shù)據(jù)庫的應(yīng)用越來越多。Jsp 、Servlet、JavaBean通過調(diào)用JDBC可以方便的訪問數(shù)據(jù)庫,加之其動態(tài)、高效、簡潔與平臺無關(guān)等特點,對動態(tài)Web應(yīng)用的開發(fā),提供了良好的支持。本文介紹了Servlet、Jsp、JavaBean通過JDBC訪問數(shù)據(jù)庫的原理和方法,并在此基礎(chǔ)上,提出了一個構(gòu)建動態(tài)Web網(wǎng)站的模型。

參考文獻:
1 陳海山.深入Java Servlet網(wǎng)絡(luò)編程.清華大學(xué)出版社,
2?張金濤.基于Linux的Apache+JSP+Oracle.清華大學(xué)出版社,
3?Danny Ayers,John Bell,Carl CalvertBettis等著,戴英,張曉暉,王輝等譯.Java數(shù)據(jù)庫編程指南.電子工業(yè)出版社,
4?李肅義,李洋. 在JSP中使用JavaBean連接數(shù)據(jù)庫.吉林大學(xué)學(xué)報(信息科學(xué)版),第20卷第3期,2002年8月,Vol.20 No.3
5?范新民. 基于JSP、JDBC技術(shù)動態(tài)訪問Web數(shù)據(jù)庫的實現(xiàn)方案. 福建師范大學(xué)學(xué)報(自然科學(xué)版),第18卷第2期,2002年6月,Vol.18 No.2

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容