狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

用JSP+Servlet完成二進制圖像的動態顯示

用JSP+Servlet完成二進制圖像的動態顯示

更新時間:2024-04-12 文章作者:未知 信息來源:網絡 閱讀次數:

數據庫應用程序,特別是基于WEB的數據庫應用程序,通常會涉及到圖片信息的顯示。我們知道在HTML語言當中為了顯示靜態的圖片資料,可以利用如下標記來實現:
<img src=http://cfan.net.cn/info/".image/hello.png" width="100" height="80">,而要顯示動態的圖片資料,就要采用相關的數據庫訪問技術來實現。在JSP環境編程中解決辦法多種多樣,通常是在數據庫中保存相應的圖片資料的名稱,而后在JSP中可以建立相應的數據源,利用數據庫訪問技術處理圖片信息。在靜態標記的基礎上,略加修改就可以用如下的標記語言實現動態圖片資料的顯示,即:<img src="../image/"+RS_photo.getString(photo_fiield) width="100" height="80">。
以上兩種解決方案,主要是將所要顯示的圖片資料存在特定的目錄下進行存取控制。如果圖片資料是存儲在數據庫中的二進制數據,上述方法就不能滿足需要了。實際操作中,可以利用JSP+Servlet的編程模式來實現圖片資料的瀏覽顯示。其基本思想是,用Servlet實現圖片資料的后臺處理,用JSP進行頁面表現,具體的編程思想如下所述。
1.建立后臺數據庫和數據庫應用程序
假定處理的是某公司的員工信息,那么我們可以建立相應的數據庫及數據表對象。假定我們要存取的數據表結構如下所示:
/****** Object: Table [dbo].[employee] Script Date: 2002-7-31 21:42:10 ******/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[employee]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[employee]
GO
/****** Object: Table [dbo].[employee] Script Date: 2002-7-31 21:42:10 ******/
CREATE TABLE [dbo].[employee] (
[id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[name] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[sex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[birthday] [datetime] NULL ,
[photo] [image] NULL ,
[title] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[department] [char] (30) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
其中,employee表中的列photo字段用于存儲員工的照片信息,則用于存儲圖像,其數據類型為“image”。接下來我們就可以建立應用程序,向數據庫中添加圖文信息。基本的操作數據庫應用程序相對簡單,大家可以利用流行的多種開發工具加以實現,并向數據庫中添加若干記錄。圖1是利用Delphi6實現的一種可行存儲image的應用解決方案。


圖1 Delphi6操作數據庫image列

程序實現的關鍵技術是流式信息存取技術。即為了實現對Image列的存取,在程序中采用了數據流讀寫圖片資料。其實現代碼主要在數據保存和記錄集移動的事件里。程序代碼在此就不再詳述。可以參閱作者的文章《用Delphi6操作SQL SERVER 2000的Image列存取JPEG圖象》
2.用Jbuilder7建立WEB應用程序
對于WEB應用程序的實現方式,我們可以采用JDK 1.4 JAVA環境、Apache Tomcat 4.0和Dreamweaver MX,也可以選擇Jbuilder7的集成開發環境。下面我們以Jbuilder7集成開發環境為例說明WEB應用程序的具體實現過程。
2.1 建立數據庫連接池訪問
啟動Jbuilder7后,新建工程readpicfromdb.jpx。在工程中建立數據庫連接池對象類,主要包括一個管理類DBConnectionManager,負責提供與多個連接池對象DBConnectionPool類之間的接口。每一個連接池對象管理一組JDBC連接對象,每一個連接對象可以被任意數量的Servlet共享。類DBConnectionPool可以提供以下功能:
● 從連接池獲取(創建)可用連接
● 把連接返回給連接池
● 在系統關閉時釋放所有資源,關閉所有連接
類DBConnectionManager則用于管理多個連接池對象,它提供以下功能:
● 裝載和注冊JDBC驅動程序
● 根據在屬性文件中定義的屬性創建連接池對象
● 實現連接池名字與其實例之間的映射。
● 跟蹤客戶程序對連接池的引用,保證睚最后一個客戶程序結束時安全地關閉所有連接池。
上述兩個類的詳細代碼,讀者可以參閱相關書籍,這里主要給出本例中用到的屬性文件db.properties其代碼如下所示:
**********數據庫連接池屬性文件db.properties***************
drivers=sun.jdbc.odbc.JdbcOdbcDriver //定義JDBC-ODBC橋驅動程序
logfile=D:\\webapp\\log.txt //定義日志文件存放的位置和名稱
comdb.url=jdbc:odbc:graduweb //定義數據庫的JDBC的URL
comdb.maxconn=10 //定義數據庫的最大連接數
comdb.user=sa //指定用于該連接池的數據庫帳號
comdb.password=sa //數據庫相應帳號的密碼
**********數據庫連接池屬性文件db.properties***************
最后將編譯過的包含數據庫連接池類的JAVA類DBConnectionManager.java 、DBConnectionManager.class以及上圖的db.properties文件一并放在工程文件的WEB-INF下的classes目錄下。
2.2 編寫讀取二進制圖片的Servlet
從Jbuilder7的File菜單里選擇新建Servlet,并將其命名為getphoto。該Servlet的JAVA源代碼如下所示:
***************Servlet getphoto.java 的JAVA代碼*************
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
public class getphoto extends HttpServlet {
private static final String CONTENT_TYPE = "image/jpeg";
/**Initialize global variables*/
public void init() throws ServletException {
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//在數據庫中照片的ID
String PHOTOID = null;
try {
PHOTOID = request.getParameter("photoid");
}
catch(Exception e) {
e.printStackTrace();
}
//連接數據庫,自定義的數據庫連接池管理類
DBConnectionManager connMgr;
connMgr = DBConnectionManager.getInstance();
Connection conn = connMgr.getConnection("comdb"); //屬性文件中定義
//用來存儲照片數據的緩沖區
byte [] buf=null;
//擴展名可以從數據庫得到,這里直接指定為JPEG
String photoname="jpeg";
try{
//根據ID查找照片
String searchSql="select photo from employee where id ="+PHOTOID;
Statement stmt = conn.createStatement();
ResultSet RS_photo = stmt.executeQuery(searchSql);
//將圖片數據讀入緩沖區
if (RS_photo.next()){
buf = RS_photo.getBytes(1);
}else
{
buf = new byte[0];
}
}catch (Exception e){
//throw e;
}
finally {
connMgr.freeConnection("comdb", conn);
}
//response.setContentType(CONTENT_TYPE);
//告訴瀏覽器輸出的是圖片
response.setContentType("image/"+photoname);
//圖片輸出的輸出流
OutputStream out = response.getOutputStream();
//將緩沖區的輸入輸出到頁面
out.write(buf);
//輸入完畢,清楚緩沖
out.flush();
}
/**Clean up resources*/
public void destroy() {
}
}
編譯后的Servlet getphoto.class也會自動放置在工程文件的WEB-INF下的classes目錄下。
2.3 JSP實現數據庫圖文信息瀏覽
成功建立好Servlet后,下一步要做的工作就是將原先的HTML標記:
<img src="../image/"+RS_photo.getString(photo_fiield) width="100" height="80">加以修改,替換為Servlet標記。即可以將下面的標記寫于HTML或JSP中頁面中
<img border="0" src="/servlet/getphoto?photoid=XXX&ts=AAAAA" >
其中XXX是圖片的ID,AAAAA是時間戳,用來防止圖片不刷新。如果我們要瀏覽數據庫中的所有圖文信息,可以加入適當的循環控制。在本文的示例WEB應用程序中作者加入了簡單的表格控制來修飾輸出的圖文信息。詳細的程序代碼如下所示:
***************JSP頁面瀏覽數據庫圖文信息代碼*************
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="comdbBean" scope="page" class="dbbean.conn"/>
//使用javabean建立頁面的數據連接
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
int table_num=4; //指定表格每行顯示記錄的條數
ResultSet RS_photo;
strSQL="select * from employee";
RS_photo =comdbBean.executeQuery(strSQL);
out.println("<table width='75%' border='1'align='center'>");
out.println("<tr>");
while(RS_photo.next())
{
String pic01=rs.getString("id_stud");
pic01=""+pic01+"";
String employeename=rs.getString("name");
//加入表格控制
out.println("<td>");
out.println("<div align=\"center\">");
out.println("<p>");
out.println("<a
href=\"inf_ employee_details.jsp?inf_employee_id=pic01\">");
out.println("<img
border=\"0\"src=\"../servlet/getphoto?photoid="+pic01+"&ts=AAAAA\" width=\"100\" height=\"120\" align=\"absmiddle\">");
out.println("</a>");
out.println("</p>");
out.println("<p>");
out.println("<a
href=\"inf_ employee _details.jsp?inf_employee_id=pic01\">");
out.println(employeename);
out.println("</a>");
out.println("</p>");
out.println("</div>");
out.println("</td>" );
table_num++;
if((table_num%4)==0)
//如果可以被4整除,則進入下一欄,否則繼續輸出
{
out.println("</tr>");
out.println("<tr>");
}
}
out.println(" ");
}
RS_photo.close(); //關閉數據集RS_subject
%>
</body>
</html>
在上例的程序代碼示例中,用javabean建立本JSP頁面的數據庫連接,用Servlet進行讀取二進制image數據。后面附加了表格修飾輸出圖文的部分代碼。程序運行結果如下圖1-6所示。


圖2 JSP頁面瀏覽數據庫圖文信息結果

以上WEB應用程序在Windows 2000 Server+JBuilder 7+SQL Server 2000+ Apache Tomcat 4.0環境下調試通過。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
成人黄色a**站在线观看| 欧美一区二区三区成人| 国产精品国产馆在线真实露脸| 国产精品v亚洲精品v日韩精品| 国产精品久久久久久久久搜平片 | 亚洲国产欧美不卡在线观看| 亚洲国产另类精品专区| 色婷婷国产精品综合在线观看| 国产福利一区二区三区在线视频| 久草这里只有精品视频| 欧美一卡二卡三卡| 国产亚洲精品久久久久婷婷瑜伽| 日本免费在线视频不卡一不卡二| 欧美日韩1234| 亚洲在线视频| 99riav一区二区三区| 国产精品无遮挡| 久久看片网站| 91猫先生在线| 亚洲国产综合91精品麻豆| 久久婷婷综合激情| 精品久久久久久久久久久久久久久久久| 国产米奇在线777精品观看| 久久久国产精品午夜一区ai换脸| 色999日韩国产欧美一区二区| 伊人蜜桃色噜噜激情综合| 日韩电影在线一区二区| 亚洲二区在线观看| 午夜视频在线观看一区二区| 亚洲欧美偷拍另类a∨色屁股| 精品国产青草久久久久福利| 欧美视频一区二| 欧美亚洲综合色| 久久久精品动漫| 亚洲欧美99| 亚洲一区国产| 国产日韩亚洲欧美精品| 成人黄动漫网站免费app| 99久久伊人精品| 成人av电影在线观看| 欧美在线视屏| 一区在线观看| 久久精品官网| 日韩免费一区二区| 久久奇米777| 亚洲视频综合在线| 日韩国产在线观看一区| 一区二区三区在线视频观看58| 日韩专区在线视频| 国产精品亚洲专一区二区三区| 国产精品99久久久久久久vr| 99精品视频在线免费观看| 欧美天堂亚洲电影院在线观看| 亚洲高清激情| 在线视频国内自拍亚洲视频| 欧美一二三四区在线| 精品免费日韩av| 欧美一区二区三区日韩| 精品国一区二区三区| 成人欧美一区二区三区黑人麻豆| 日韩av电影一区| 欧美在线免费一级片| 亚洲综合丁香| 久久久九九九九| 国产综合久久久久久鬼色| 北条麻妃一区二区三区| 91免费视频观看| 国产精品毛片| 91久久久免费一区二区| 欧美一级高清大全免费观看| 欧美日韩一区二区三区在线看| 欧美一区二区视频在线观看2022 | 国产精品夜夜嗨| 亚洲精品九九| 欧美一区二区精美| 亚洲午夜私人影院| 97se亚洲国产综合自在线| 亚洲免费综合| 精品少妇一区二区三区视频免付费| 亚洲欧美日韩电影| 狠狠色狠狠色综合系列| 91久久久一线二线三线品牌| 欧美三级三级三级| 亚洲成人免费影院| 色综合欧美在线视频区| 欧美视频中文字幕| 视频精品一区二区| 国产精品毛片在线| 中文字幕一区二区三区不卡在线 | 欧美日本精品一区二区三区| 一区二区三区在线观看欧美| 欧美不卡视频| 日本不卡高清视频| 久久久青草青青国产亚洲免观| 懂色一区二区三区免费观看| 色婷婷久久久亚洲一区二区三区| 国产激情一区二区三区桃花岛亚洲| 国产亚洲一二三区| 精久久久久久| 大白屁股一区二区视频| 亚洲你懂的在线视频| 欧美日本一区二区三区四区| 在线日本成人| 成人性生交大片免费看中文| 亚洲高清一区二区三区| 91网站视频在线观看| 在线看一区二区| 老司机免费视频一区二区| 日韩一级片在线播放| 欧美日韩精品久久| 日本一区二区三级电影在线观看 | 最新久久zyz资源站| 香蕉久久夜色精品国产| 日本在线不卡视频一二三区| 日韩免费看的电影| 亚洲毛片播放| 麻豆国产一区二区| 精品少妇一区二区三区免费观看| 亚洲激情成人| 国产电影精品久久禁18| 成人欧美一区二区三区白人| 在线观看一区二区精品视频| 日日骚欧美日韩| 中文字幕制服丝袜一区二区三区| 欧美三级在线视频| 欧美激情第六页| 韩国av一区二区三区在线观看| 国产嫩草影院久久久久| 麻豆9191精品国产| 激情婷婷亚洲| 欧美成人在线免费观看| 国产麻豆91精品| 污片在线观看一区二区| 中文字幕一区二区5566日韩| 国产欧美一区视频| 一区二区三区福利| 美女一区二区视频| 久久精品这里都是精品| 亚洲精品欧美| 久久亚洲春色中文字幕久久久| 国产欧美成人| 不卡一区二区中文字幕| 美国一区二区三区在线播放| 国产女同性恋一区二区| 久久激情一区| 久久久久综合| 在线免费观看日本欧美| 亚洲美女视频在线免费观看 | 91精品国产综合久久国产大片| 色婷婷综合久久久久中文一区二区 | 欧美夫妻性生活| 欧美日韩精品久久久| 日韩欧美区一区二| 91久久精品一区二区三区| 色综合久久天天综合网| 香蕉亚洲视频| 欧美美女视频在线观看| 欧美午夜寂寞影院| 欧美精品国产精品| 久久婷婷成人综合色| 日韩欧美成人午夜| 欧美激情一区二区| 日韩精品亚洲一区| 韩国欧美国产一区| 成人午夜又粗又硬又大| 91原创在线视频| 午夜一区在线| 色999日韩国产欧美一区二区| 欧美一区二区三区思思人| 国产精品久久久久久久久免费丝袜| 久久夜色精品一区| 亚洲中国最大av网站| 久久av中文字幕片| 亚洲精品偷拍| 色呦呦国产精品| 午夜国产精品影院在线观看| 国内外成人在线| 亚洲精选成人| 欧美日韩精品欧美日韩精品| 国产精品天天摸av网| 精品亚洲国内自在自线福利| 99久久99久久综合| 精品日韩在线观看| 免费三级欧美电影| 91视频你懂的| 国产蜜臀97一区二区三区| 成人午夜精品一区二区三区| 影音欧美亚洲| 亚洲免费av网站| 亚洲黄页一区| 亚洲美女在线一区| 久久蜜桃资源一区二区老牛| 日韩欧美aaaaaa| 成人福利视频网站| 国产精品毛片| 麻豆精品久久精品色综合| 在线亚洲欧美专区二区| 国产成人免费视频网站| 欧美一级二级三级蜜桃| 99这里只有精品|