基于JSP及MySql数据库的图片存储和显示技术初探

基于JSP及MySql数据库的图片存储和显示技术初探


2024年4月27日发(作者:)

聪P MySq l 及基于c∽_-0 

∽ 

Research on Image Storing and Di sp1aying Technology Based Oil JSP and MySql D数 - 

据 

库 

吴闻吴焰斌 的 

l砌 Wu Yanbin 图 

片 

(福建师范大学数学与计算机科学学院,福建福州350108) 存 

(School ofMathematics and Computer Science,Fujian Normal University,Fujian Fuzhou 350108) 储 

和 

显 

摘要:图片越来越多的出现在Web应用程序中,传统的文件存储方式已经不能满足要求。文中列举了数据库存储的好 技 示 

处,介绍了数据库对大容量字段的支持,并以JSP和MySql为例,介绍了Web服务器上图片的数据库存储和显示技术。 术 

初 

关键词:JSP;MySql;BLOB;FORM;Servlet 探 

中图分类号:TP391 文献标识码:A 文章编号:1671-4792.(2011)1.0091.03 

Abstract:In web applications,developers are using more and more images,however the traditional way of savmg ifles can’t meet 

this need.In our study,we enumerate various advantages of database,detail the database’S support to BLOB.Taking JSP and MySql as 

an example,we demonstrate how to store and display images on a web server. 

Keywords:JSP;MySql;BLOB;FORM;Servlet 

0引言 数据的存储和访问操作。通过JSP技术,用户可以将图片存 

图片是Web页面上一种非常常见的元素,一方面可以 储到数据库服务器,也可以将数据库服务器上的图片在客户 

美化页面,取得很好的视觉效果;一方面也可以作为传达信 端的浏览器上显示。 

息的重要载体,直观明了。随着计算机处理能力和网络带宽 2 MySql数据库 

的提高,图片越来越多多出现于Web应用程序中。 MySql是一个小型关系数据库管理系统,以其免费开 

在服务器上,传统的图片信息存储方式是以文件的形 源、功能完善、性能优越而著称,适用于中小规模信息量的存 

式,存储于服务器的文件系统中。如果图片较多,服务器上的 储。从成本和性能的角度来考虑,它是中小型网站建设的首 

文件数量就会很多,管理会是一件很棘手的事情。图片信息 选数据库服务器。MySlq支持的BLOB字段是一个大容量的 

的另一种存储方式是采用数据库的方式。数据库擅长于大量 二进制信息存储字段,它能容纳不同大小的数据。BLOB类 

信息的集中存储,并提供了较完善的信息管理和维护功能。 型实际是个类型系列(TinyBlob、Blob、MediumBlob、Long. 

各种数据库服务器也都提供了大容量的存储字段,可以用来 Blob),除了在存储的最大信息量上不同外,它们的本质是相 

存储图片信息,如MySql的BLOB类型字段。数据库方便管 同的。MySQL的四种BLOB类型的具体情况如表一所示: 

理和维护的优势使得它越来越多的应用于网站图片信息的 表一MySQL中四种BLOB类型的具体情况 

存储。 类型 大小(单位:字节) 

本文主要是探讨基于JSP及MySql数据库服务器的图 TinyBlOb 最大255B 

片存储和显示技术。 Blob 最大65K 

1 JSP技术 MediumB1ob 最大16M 

JSP是基于Java语言的一种Web应用开发技术,继承 LongB10b 最大4G 

了Java语言的诸多优点,是一个开发电子商务应用的强大 可以根据实际存储信息的大小来选择相应类型,图片信 

工具。它包含JSP页面、JavaBean、Servlet及若干内置对象・ 息的数据库存储就是采用该类字段来实现。 

JSP页面、JavaBean及Servlet实际上就是Java程序,由Web 3图片上传 

服务器调用执行,来响应和处理用户请求,进行数据处理工 用户可以在客户端浏览器将选定的图片文件上传并保 

作。JSP页面或Servlet可以通过JDBC与数据库交互,完成 存到MySql服务器。这个操作的实现,分为两个阶段完成: 

g1 

~ 

(1)用户访问图片上传页面,浏览本地文件系统,选择要 

上传的图片文件,确定提交后,向指定的服务器端组件发出 

请求,提交上传信息。 

图片上传页面要求包含一个File类型的表单,可以让用 

户选择要上传的文件,其定义格式如下: 

<FORM action=”图片接收Servlet的URL地址” 

method=’’post”enc ̄e=”multipart/form—data’’ 

<Input type=”File”name=”参数名字”> 

</FORM> 

本文的示例中,设计了一个名为Pic

_

UpLoad.jsp的JSP 

页面,其中包含一个File类型的表单,为用户提供图一的操 

作界面。 

图一页面中为用户提供的操作界面 

点击浏览按钮可以浏览本地文件系统,选择待上传到图 

片文件,然后,点击上传图片按钮,向服务器提交选中的图片 

文件。如: 

Pic

_

UpLoad.jsp中的关键代码如下: 

<FORM action=”Up

Image

File”method=”post”ENC— 

—_

TYPE=”multipart/form—data”> 

<INPUT type=FILE name=”Image

_

File”size=”45”> 

<INPUT name=”submit”type=”submit”value=”上传图 

片”> 

</FORM> 

其中Form的action项指示表单信息提交的目标为 

Up

Image

__

File,它对应服务器端的一个Servlet,负责接收用 

户提交的信息,并从中解析图片信息,存人数据库中。 

(2)服务器端调用相应的组件响应用户的请求,从用户 

提交的信息流中解析出图片信息,存人数据库。这项工作可 

以由一个Servlet来完成。如上例中action项所指定的目标 

就是一个Servlet。 

当用户向Web服务器某个JSP页面或Servlet提交信息 

时,服务器将这些信息封装在内黄对象request中,包括File 

类型表单提交的文件内容。在JSP页面或Servlet中,可以访 

问这个request对象,调用它的方法getlnputStream0获得一 

个输入流,这个输入流包含用户上传的全部信息,对这个输 

入流进行解析,可以分离出我们所感兴趣的部分。对于File 

类型表单提交的信息,输入流的前4行和后5行是表单本身 

的信息,中间部分才是用户上传的文件内容。服务器端的 

Servlet可以按如下的过程提取图片文件内容并写入MySql 

的BLOB字段: 

①调用request对象的getinputStreamO方法,获得输入 

流,如: 

InputStream in=request.getlnputStream0; 

输人流iIl包含了用户提交的所有信息。 

②读取输入流所有信息到一个byte数组中,并关闭输 

入流,如: 

int length;request.getContentLength0; 

byte b[]=new byte[1ength]; 

intn=0: 

intotiset O: 

while(n!=一1) 

{ 

n=in.read(b,offset,7670); 

offset+=n: 

//out.printni(”循环内n值为:”+n); 

}; 

in.close0; 

上述代码将输人流in包含的所有信息依次读取到byte 

数组b[]中。 

③定位第4个回车符和倒数第6个回车符的位置,即为 

图片文件内容的起始位置和终止位置。 

//获取第4行回车符号的后一个位置,即上传图片文件 

的起始位置 

int forthEndPosition=O: 

int Temp Pointer=O: 

intforth一1; 

while(Temp_Pointer<length&&(forth<=4)) 

{ 

if(b[Temp Pointer++】一’ha') 

{ 

forthEndPosition=Temp

Pointer; 

_

f0州h++: 

) 

) 

//获取第六行回车符位置,即为上传文件的结束位置, 

保存到SixendPosition变量中 

int SixendPosition=length; 

Temp

Pointer=length; 

_

intj=1; 

while((Temp_Pointer>=O)&&(j<=6)) 

{ 

Temp

Pointer-一: 

_

if(b[Temp_Pointer]一’ ’) 

{ 

SixendPosition=Temp

_

Pointer; 

j++; 

SixendPosition-=2; 

//将结果后移两位,就是上传文件的结束位置 

④根据定位的结果,从byte数组中取出图片文件内容, 

存入一个输入流中。 

int startPoint=forthEndPosition; 

int endPoint=SixendPosition;

int Count=endPoint—startPoint+1; 

ByteArraylnputStream b

in new ByteArraylnputStream 

(b,sta

上述代码将byt

rtPoint,Count);/

e数组b中的图片文件内容保存到输入 

/图片内容 

流b

in中。 

_

⑤创建

Connection类型的数据库连接对象con,连接数 

据库。

⑥利用数据库连接对象创建Preparedstatement类型的 

实例对象,保存带参的SQL预编译语句,如: 

reparedStatement s con.prepareStatement r”insert into test 

(name,pic)values(’me’,?)”); 

此处涉及的test数据表包含3个字段:pic

id、name及 

pic。pic

._

id字段为int类型,且具有自增属性;name字段为

VARCHAR类型;pic是一个Blob类型的字段,用来存放图 

片文件内容。该预编译语句的功能是向test数据表中插入一 

条记录,name字段值为”me”,pic字段值为”?”,表示该字段 

的值待定,在执行该预编译语句时,以参数的形式确定它的 

取值。当向包含Blob类型字段的数据表插入记录的时候, 

Blob字段是不能直接赋值的,需要通过带参SQL预编译语 

句,将该字段的值设为待定,在执行预编译语句的时候,为它 

指定一个输入流作为参数,实现将输人流包含的信息写入 

Bl0b字段。 

⑦将④中的输人流作为参数,执行⑥中SQL预编译语 

句,将用户上传的图片文件内容存人到MySql数据库的 

Blob类型字段中。 

s.setBinaryStream(1,b_in); 

s.executeUpdate0; 

通过这7个步骤完成图片信息的获取和存储。 

4图片显示 

存储在数据库中图片的显示涉及两个组件,一个是前台 

供客户端浏览器浏览显示图片的页面,一个是在后台由服务 

器调用,读取数据库中图片信息的JSP或Servlet。 

(1)前台页面可以是一个普通的HTML页面或其它的动 

态页面,页面中需要包含一条img标签,调用后台的JSP或 

Servlet获取图片信息,并在页面上显示,如以下语句: 

<img src=<%=”Pic_Show.jsp?pic_id=2)%>boMe ̄”0” 基 

Pic_Show.jsp就是一个在后台负责读取数据库中图片信 于 

L 

息的JSP页面,参数pic_id指定待显示图片在数据库中的id _∽ 。 

号。 及 

(2)后台JSP或Servlet根据显示页面的请求,查询数据 王 

∽ 

库,从返回的记录中读取出保存在Blob字段中的图片信息, 。_ 

数 

然后将图片信息发送到显示页面显示。(1)中所提到的 据 

Pic

Show.jsp部分关键代码如下: 库 

_

的 

String pic

id

__

s=(String)request.getParameter(”pic id”); 图 

pic

id=Integer.parselnt(pic_id_s); 片 

_

存 

String sql

d=” ̄pic

id; 储 

 r=s.

xt-=”sel

execut

ect pi

eQuer

c rfom 

y(s

tes

ql

 

xt

wher

); 

e pic

ResultSe

__

和 

显 

r.next0; 示 

Blob b=r.getBlob(”p ); 

技 

术 

long size=b.1ength(); 初 

探 

byte[】bs=b.getBytes(1,(int)size); 

response.setContentType(”image/jpeg”); 

OutputStream outs=response.getOutputStream0; 

outs.write(bs); 

outs.lfush0; 

Pic

_

Showjsp根据(1)中前台页面img标签传递过来的 

参数pic

_

id查询test表,返回的记录中只包含一个字段,即 

存储图片信息的pic字段。设置Pic

_

Show.jsp的ContentType 

为“imag/jpeg”,然后将图片信息写入输出流,实现将图片信 

息发送给显示页面显示 

5结束语 

本文介绍的网页图片数据库存储和显示方法还可以进 

一步加强,实现缩略图功能,这也是很多网站使用到的一个 

技术。文中提到的方法稍加修改同样适用于其他的平台。 

参考文献 

[1】范立锋,乔世权,程文彬.JSP程序设计【M】.北京:人民 

邮电出版社,2009. 

【2】郑阿奇.MySQL实用教程[M】.北京:电子工业出版社, 

2009. 

作者简介 

吴闻(1973一),男,汉族,讲师,硕士研究生,主要研究方 

向:软件与理论; 

吴焰斌(1979一),男,汉族,助理实验师,硕士研究生,主 

要研究方向:网络管理及网络技术。 

g3 


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714228179a2406213.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信