最近做了一个小工具给朋友用,需要将图片保存到数据库中,由于朋友只是在单机使用,也就是服务器/客户端是同一台机器,所以就忽略文件上传部分,如果用在传统B/S架构中,需要添加文件上传功能,否则会出错,好了,下面总结一下具体步骤:
一、向数据库中保存图片
在JSP页面中添加文件选择控件:
照片:
<html:file property="picture" onchange="setPic()"></html:file>
<div id="pic" style="display: inline;">
<img src="./images/defaultHead.jpg" height='95' width='70'/>
</div>
这个很简单,不必多说,div层中放的是一张默认图片,当用户选择了一张图片后则使用JS控制显示用户所选图片。
接着,在Struts的Action中处理图片:
public ActionForward addWorker(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
WorkerForm workerForm = (WorkerForm)form;
String picture = workerForm.getPicture();//获取图片路径
//封装工人对象
Worker worker = new Worker();
worker.setPicture(picture);
//如果图片路径不为空,则读取图片
if(null!=picture&&!"".equals(picture)){
InputStream image = new FileInputStream(picture);
worker.setImage(Hibernate.createBlob(image));
}
//调用业务逻辑,保存单位
workerService.addWorker(worker);
//转向工人列表
return loadQueryWorker( mapping, form,
request, response);
} catch (Exception e) {
e.printStackTrace();
saveErrors(request, ExceptionUtils.dealException(e));
return mapping.findForward("global.error");
}
}
在Worker类中,有一个java.sql.Blob类型的属性image,用来存放图片信息:
public class Worker {
private Blob image;
public Blob getImage() {
return image;
}
public void setImage(Blob image) {
this.image = image;
}
}
Worker.hbm.xml映射文件中如下配置:
<property name="image" type="java.sql.Blob">
<column name="PICTURE" length="100" />
</property>
数据库中PICTURE字段的类型为image。
接下来直接调用WorkerDAO的方法保存对象即可:
public class WorkerDAO extends FoHibernateDaoSupport implements IWorkerDAO {
public void addWorker(Worker worker) {
this.getHibernateTemplate().save(worker);
}
}
这样,一张图片就以二进制形式存储到数据库中了
二、读取并显示图片
保存成功后,下面的工作就是如何从数据库中读取图片并显示到页面中了。
还是从页面开始,在页面中想要显示图片的地方添加如下代码:
<img title="" alt="图片格式错误" height='95' width='70' src='workerAction.do?method=showWorkerPicture&id=<bean:write name="worker" property="id"/>'/>
这个图片标签的alt属性指定如果图片显示错误的提示信息,src属性指向了Struts的一个Action方法,下面就来看一下这个action:
/**
* 显示工人照片Action
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward showWorkerPicture(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
WorkerForm workerForm = (WorkerForm)form;
String id = workerForm.getId();//得到工人编号
//调用业务逻辑,查询图片
Blob image = workerService.queryPicture(id);
int length = (int)image.length();//取得流中的可用字节总数
byte[] buf=image.getBytes(1,length);//获取Blob字节数组
response.setContentType("image/jpeg");
OutputStream toClient=response.getOutputStream();//获取输出流
for (int i = 0; i < buf.length; i++) {
toClient.write(buf[i]);//输出到页面
}
toClient.close();//关闭输出流
return null;
} catch (Exception e) {
e.printStackTrace();
saveErrors(request, ExceptionUtils.dealException(e));
return mapping.findForward("global.error");
}
}
Action的方法中从数据库中读取了某一个Blob类型的图片并输出到页面中。下面再看一下DAO如何读取图片:
public Blob queryPicture(String id) {
Worker worker = (Worker) this.getHibernateTemplate().get(Worker.class, id);
return worker.getImage();
}
就是这么简单的两居代码即可读取图片了。
分享到:
相关推荐
实际上,写完多文件上传和下载文章的时候,类似的想法就已经有了,一直没有实际把它整理好...2. 从数据库中读取图片并显示在页面中 注:本文使用的是单纯的Struts2 + Spring + Hibernate,图片操作并没有使用Servlet。
从数据库中读取数据,hibernate,struts2,spring三框架整合
二、Hibernate部分 三、Action部分 四、struts.xml部分
hibernate和struts存图片到数据库并读取显示在jsp
种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据 库操作,降低了编程的效率以及系统的可维护性;2)传统的J2EE应用 多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但 是使用EJB容器进行...
使用hibernate读写数据库大字段的简单示例程序,使用技术struts、hibernate、jsp。内附源代码及数据库脚本文件和详细说明。
15. Struts程序启动时,首先从配置文件struts-config.xml文件中读取相关信息,根据这些信息,控制器可以知道把视图中的请求转发给那个业务逻辑处理。视图组件,控制器,业务逻辑组件之间没有代码的联系。 16. Struts...
struts2 spring hibernate环境 主要是select标签从数据库读数据,形成下拉列表框
项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问....本DEMO使用了spring security, hibernate jpa 以及struts.
全当给所有打算使用struts2却没有接触过的人一个入门而已.我也是初看.才2天而已.所以各位高手就不要笑话了.愿大家都能成为高手. <br> 项目发布以后的第一个页面是登陆.后台代码没有写相关的验证代码.并不是...
所以没有上传导入的jar,其实就是默认的struts2和hibernate以及spring的包.该项目使用的jar包为以下. spring-beans.jar xwork-2.0.4.jar spring-context.jar ognl-2.6.11.jar spring-web.jar ...
这Demo里边有一个1.jsp,它是传一个word文件,然后读取doc里的文字和图片到jsp显示。还有一个html5的画板Demo,可以再jsp里绘画,应该还有其他的比如编辑器的Demo,用了hibernate和struts2,运行tomcat前修改数据库...
3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。 通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。 以上是Spring+...
JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring中的...
MySQL 是一款广受欢迎的... test(非必要):默认提供的测试数据库,通常用于学习和实验,生产环境中可考虑删除。 sys(自MySQL 5.7版本):提供更易用的视图来访问performance_schema中的信息,简化性能分析工作。
struts2+spring4.0+hibernate4.0框架,读取数据库并在jsp页面显示
JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring中的...
Simple Java Framework Generator是一个项目,其中数据库读取一个结构(表,列,外键,主键),并使用带注释的Hibernate,Struts(验证,国际化),带Jstl和Ajax的Jsp来在Java中装入对象。
由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...
Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...