摘要:在動(dòng)態(tài)網(wǎng)頁的設(shè)計(jì)中,圖像文件的存取已成為一項(xiàng)必不可少的工作。該文結(jié)合實(shí)例,具體給出了在JSP網(wǎng)頁設(shè)計(jì)中,利用JavaBean的封裝技術(shù),實(shí)現(xiàn)在SQLserver2000數(shù)據(jù)庫中存取圖像文件的方法,并給出了主要代碼,對(duì)JSP動(dòng)態(tài)網(wǎng)頁的制作有借鑒意義。
關(guān)鍵詞:JSP;JavaBean;SQL server;圖像
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)14-3593-03
Taking JavaBean as an Access to Image Files in SQL server Database
LI Qun
(North University for Nationalities, Yinchuan 750021, China)
Abstract: To design dynamic web pages, getting access to image files has become absolutely necessary. Supported by concrete examples, the author of this paper points out that in designing JSP web pages we can get access to image files in SQL server 2000 Database by applying the packaging technology of JavaBean. He also lists the key codes, which can help to design JSP dynamic web pages.
Key words: JSP; JavaBean; SQL server; image
1 引言
JSP的全稱是Java Server Pages,它是太陽微系統(tǒng)公司(Sun Microsystems Inc)倡導(dǎo),多家公司參與建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)。在JSP應(yīng)用程序中,數(shù)據(jù)庫訪問是一個(gè)重要的應(yīng)用。然而,在JSP文件中直接嵌入訪問數(shù)據(jù)庫的代碼及SQL語句則會(huì)使頁面設(shè)計(jì)困難。如果將JSP和JavaBean技術(shù)結(jié)合在一起,可以用JavaBean實(shí)現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)庫操作的封裝,使用JavaBean處理所有的數(shù)據(jù)訪問,JSP只負(fù)責(zé)頁面的顯示,可提高對(duì)數(shù)據(jù)庫進(jìn)行訪問的安全性及JSP網(wǎng)頁設(shè)計(jì)的方便性[1]。此外,在動(dòng)態(tài)網(wǎng)頁的設(shè)計(jì)中,圖像文件的存取已成為動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)的一項(xiàng)必不可少的工作。利用數(shù)據(jù)庫實(shí)現(xiàn)圖片的集中存儲(chǔ),同時(shí)以網(wǎng)絡(luò)為連接,通過基于HTTP協(xié)議的網(wǎng)絡(luò)瀏覽器實(shí)現(xiàn)對(duì)數(shù)據(jù)庫包括圖片數(shù)據(jù)的遠(yuǎn)程訪問[2],已是目前基于B/S結(jié)構(gòu)設(shè)計(jì)的主流。本文結(jié)合實(shí)例,具體論述了在JSP網(wǎng)頁設(shè)計(jì)中,調(diào)用JavaBean,實(shí)現(xiàn)在SQLserver2000數(shù)據(jù)庫中存取圖像文件的方法。
2 JSP程序運(yùn)行環(huán)境及示例數(shù)據(jù)庫的建立
2.1 JSP程序運(yùn)行環(huán)境的建立
本文所采用操作系統(tǒng)為Windows 2000 Server版本。JDK是1.5版本, Tomcat是5.5版本。其安裝及配置,在許多資料上都可以找到,不再贅述。
在微軟網(wǎng)站上下載Microsoft SQL Server 2000 JDBC驅(qū)動(dòng)程序。執(zhí)行ms_jdbc_setup.exe可執(zhí)行文件,完成安裝。安裝目錄\\lib\\下的三個(gè)jar文件(msbase.jar、mssqlserver.jar、msutil.jar)是JDBC驅(qū)動(dòng)核心,將這三個(gè).jar文件加到CLASSPATH中。
2.2 示例數(shù)據(jù)庫的建立
圖片數(shù)據(jù)從存儲(chǔ)的角度來看,相當(dāng)于二進(jìn)制數(shù)據(jù)的集合,被稱為二進(jìn)制大對(duì)象塊(binary large object block,BLOB)。在 SQL Server 中,image數(shù)據(jù)類型存儲(chǔ)的是長度不確定的二進(jìn)制數(shù)據(jù),最大長度是2GB,通??梢杂脕泶鎯?chǔ)各種格式的圖像信息[3][4]。本文將圖片文件轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)塊存儲(chǔ)到image字段中,使用時(shí)再將二進(jìn)制信息轉(zhuǎn)換成為原來格式的文件內(nèi)容。據(jù)此,在SQL server 2000企業(yè)管理器中,建立數(shù)據(jù)庫jbtest,在其中建立表pictest,表結(jié)構(gòu)如表1所示。
3 開發(fā)、裝配并部署訪問數(shù)據(jù)庫的JavaBean
3.1 開發(fā)Java程序
用記事本等文本編輯器編寫Java程序PicBean.java,主要代碼如下:
public class PicBean
{
private Connection con;
public PicBean ()//初始化連接。
{ String CLASSFORNAME=\"com.microsoft.jdbc.sqlserver.SQLServerDriver\";
String SERVANDDB=\"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jbtest\";
String USER=\"sa\";
String PWD=\"123\";
try{
Class.forName(CLASSFORNAME);
con = DriverManager.getConnection(SERVANDDB,USER,PWD);
}catch(Exception e){e.printStackTrace();}
}
//在數(shù)據(jù)庫中添加信息
public void addpictest(String userName,String picture)throws Exception
{FileInputStream str=new FileInputStream(picture);
try{
PreparedStatement pstmt=con.prepareStatement(\"insert into pictest values(?,?)\");
pstmt.setString(1,userName);
pstmt.setBinaryStream(2,str,str.available());
pstmt.execute();
con.close();}catch(Exception e)
}
//查詢數(shù)據(jù)庫
publicResultSet getpictest(String userName){
try{
Statement stm=con.createStatement();
ResultSet result=stm.executeQuery(\"select * from pictest where userName='\"+userName+\"'\");
return result;}catch(Exception e){}
return 1;}}
3.2 裝配和部署JavaBean
在DOS命令行方式下,用javac PicBean.java命令將PicBean.java文件編譯成字節(jié)碼文件PicBean.class,為了簡化論述,本文將PicBean.class文件拷貝到tomcat的應(yīng)用目錄下的“\\WEB- INF\\classes\\”下。
4 在JSP網(wǎng)頁中調(diào)用JavaBean完成對(duì)數(shù)據(jù)庫的連接訪問及圖片文件的存取
4.1 開發(fā)并部署存儲(chǔ)圖片的JSP應(yīng)用程序
編寫訪問SQLserver數(shù)據(jù)庫并完成圖像文件存儲(chǔ)的jsp文件,本文中將文件名定為setpic.jsp,其主要代碼如下:
使用JavaBean在數(shù)據(jù)庫中存入圖片文件:
<%String userName=\"liqun\";
String picture=\"d:\\\\pictest.jpg\";
try {contact.addpictest(userName,picture);
}catch(Exception e){}
%>
代碼中“String userName=\"liqun\"; String picture=\"d:\\\\pictest.jpg\";”中的字符串,在實(shí)際使用中可根據(jù)需要,利用request對(duì)象從其它靜態(tài)網(wǎng)頁的表單中得到。其中,\"d:\\\\pictest.jpg\"表示要存入數(shù)據(jù)庫的圖片文件。
將該JSP程序部署于目錄tomcat的安裝目錄下的webapps中自己的應(yīng)用目錄下(例如應(yīng)用目錄為myweb)。啟動(dòng)tomcat,在瀏覽器中輸入http://localhost: 8080/myweb/setpic.jsp,就可完成數(shù)據(jù)庫中所要數(shù)據(jù)的存儲(chǔ)。
4.2 開發(fā)并部署讀取圖片的JSP應(yīng)用程序
編寫訪問SQLserver數(shù)據(jù)庫并完成圖像文件讀取的jsp文件,本文中將文件名定為getpic.jsp,其主要代碼如下:
使用JavaBean來讀取數(shù)據(jù)庫中的圖片:
<% String userName=\"liqun\";
try{
ResultSet rst=contact.getpictest(userName);
while(rst.next()){
//rs.setContentType(\"image/jpeg\");
ServletOutputStream sout = response.getOutputStream();
InputStream in = rst.getBinaryStream(\"picture\");
byte b[] = new byte[0x7a120];
for(int i = in.read(b); i!= -1;){
sout.write(b);
in.read(b); }
sout.flush();
sout.close();
}
rst.close();
} catch(Exception e){System.out.println(e);} %>
代碼中“String userName=\"liqun\";”中的字符串,在實(shí)際使用中可根據(jù)需要,利用request對(duì)象從其它靜態(tài)網(wǎng)頁的表單中得到。
將該JSP程序部署于目錄tomcat的安裝目錄下的webapps中自己的應(yīng)用目錄下(例如應(yīng)用目錄為myweb)。啟動(dòng)tomcat,在瀏覽器中輸入http://localhost: 8080/myweb/getpic.jsp,就可完成對(duì)數(shù)據(jù)庫的訪問并在網(wǎng)頁中顯示數(shù)據(jù)庫中所查詢的圖像。
5 結(jié)束語
本文所述的在JSP網(wǎng)頁中通過調(diào)用JavaBean實(shí)現(xiàn)了對(duì)SQL Server2000數(shù)據(jù)庫中圖像文件存取的方法,已在實(shí)際應(yīng)用中經(jīng)過測試。為了最高效率的對(duì)數(shù)據(jù)庫進(jìn)行訪問,還應(yīng)該考慮用數(shù)據(jù)庫連接池技術(shù)。
參考文獻(xiàn):
[1] 劉曉華,張健,周慧貞. JSP應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社.2007
[2] 李偉民,何偉,李平. 基于Web的SQLServer數(shù)據(jù)庫存取圖片的Delphi實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(12):2943-2945.
[3] 于松濤. 精通SOL Server 2000 數(shù)據(jù)庫管理與開發(fā)[M].北京:人民郵電出版社,2001.
[4] 古凌風(fēng). 用ADO技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫圖像字段的存取[J].計(jì)算機(jī)工程與設(shè)計(jì),2004,25(8):1388-1392.