最近做了一个小工具给朋友用,需要将图片保存到数据库中,由于朋友只是在单机使用,也就是服务器/客户端是同一台机器,所以就忽略文件上传部分,如果用在传统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();
}
就是这么简单的两居代码即可读取图片了。
分享到:
相关推荐
总的来说,这个项目涵盖了Hibernate和Struts2的基础使用,包括数据库操作、用户认证、权限控制以及数据的展示。对于初学者,理解这些基本概念和操作流程,能够为深入学习Java Web开发打下坚实的基础。在实践中不断...
注册功能则涉及新用户的创建,包括收集用户信息,校验数据合法性,并使用Hibernate将新用户信息保存到数据库中。 **5. 安全性考虑:** 虽然描述中未明确提及,但在实际开发中,登录注册系统必须考虑安全性问题,如...
在数据库中存储图片后,我们需要提供一个方法来从数据库中读取图片并显示在页面上。这可能涉及到创建一个新的Action或者在现有Action中添加一个新方法,该方法将查询数据库获取图片数据,并将其发送到响应。 ```...
本实例主要探讨如何利用Hibernate和Struts框架来处理MySQL数据库中的BLOB字段,实现文件的上传与下载功能。 **一、Hibernate框架** Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射...
Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建基于MySQL数据库的应用程序时发挥着关键作用。Struts2作为一个MVC(Model-View-Controller)框架,主要用于处理用户请求并展示结果,而Hibernate则...
Struts和Hibernate是两个在Java Web开发中广泛使用的开源框架。Struts主要负责MVC(Model-View-Controller)架构的实现,提供控制层的功能,而Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作...
总结来说,“Hibernate+Struts2项目增删改查”涵盖了Web应用中核心的数据管理功能,通过Hibernate的ORM特性简化了数据库操作,而Struts2则提供了高效的请求处理和视图控制,两者结合为开发者构建复杂Web应用提供了...
3. **整合Hibernate和Struts2**:在实际项目中,这两者常常结合使用。Hibernate负责数据持久化,而Struts2处理HTTP请求和转发控制。你需要理解如何在Struts2的Action中注入SessionFactory,然后在业务逻辑中调用...
在Struts框架中,与数据库的连接是实现业务逻辑的重要环节,下面我们将深入探讨Struts如何与数据库进行交互。 1. **Struts 2 数据库连接配置** - **DataSource**: 在企业级应用中,通常使用DataSource来管理数据库...
标题中的“hibernate+Struts2包”指的是一个整合了Hibernate对象关系映射框架与Struts2 MVC框架的开发包。这个包包含了运行基于这两款技术的Java Web应用程序所需要的核心库。描述中提到,这个包是正确的,适用于...
Struts2和Hibernate是两种非常流行的Java Web开发框架,它们分别负责MVC(Model-View-Controller)架构中的控制层和持久层。本教程通过一个简单的Demo,展示了如何将这两个框架整合,实现基本的CRUD(创建、读取、...
综上所述,通过整合Hibernate、Struts2和Spring三个框架,我们可以实现从数据库中读取数据,并利用Struts2中的`doubleSelect`标签来展示数据的功能。这种技术不仅提高了开发效率,而且增强了用户体验。开发者可以...
1. **读取并解析配置文件**:Hibernate通过读取hibernate.cfg.xml或hibernate.properties文件来获取数据库连接信息和其他配置设置。 2. **解析映射信息,创建SessionFactory**:映射信息通常在.hbm.xml文件中定义,...
【标题】"一个简单的增删查改demo(jsp,hibernate,struts2)"提供了基于Java Web技术栈的数据库操作示例,主要涉及了三个核心组件:JSP(JavaServer Pages)、Hibernate(对象关系映射框架)和Struts2(MVC框架)...
在IT行业中,开发Web应用程序时,常常需要使用到ORM(对象关系映射)框架来处理数据库操作,而Hibernate就是其中的佼佼者。Struts2则是一个常用的MVC(模型-视图-控制器)框架,它能有效地组织和管理前端与后端的...
Struts和Hibernate是Java开发中两个非常重要的框架,它们分别在MVC(Model-View-Controller)模式和对象关系映射(ORM)领域扮演着关键角色。本篇将深入探讨这两个框架以及它们如何协同工作来实现数据库的简单插入...
- 使用Spring的`LocalSessionFactoryBean`,它读取Hibernate配置并创建SessionFactory实例。 - 在Service层,Spring的bean可以通过`SessionFactory`注入,实现对DAO层的事务控制。 2. **Spring与Struts2整合**: ...
在Struts框架中,Model代表业务逻辑,View负责数据显示,Controller处理用户的请求并协调Model和View。控制器接收HTTP请求,根据配置的Action Mapping转发到相应的Action类执行业务逻辑,Action完成后,将结果返回给...
总之,这个项目展示了如何将Struts2和Hibernate结合使用,以实现文件批量上传到数据库以及Ajax分页显示的功能。通过学习这个项目,开发者可以深入理解Java Web开发中的MVC模式、ORM框架以及前端动态加载技术。
整合Struts2和Hibernate时,需要配置Struts2的Action类以调用Hibernate的DAO方法,同时在Hibernate的配置文件中设置数据库连接参数。开发者还需要为每个数据库表创建对应的实体类,并通过注解或XML映射文件来定义其...