Struts+Spring+Hibernate实现上传下载

上传人:简****9 文档编号:109719540 上传时间:2019-10-27 格式:DOC 页数:20 大小:278KB
返回 下载 相关 举报
Struts+Spring+Hibernate实现上传下载_第1页
第1页 / 共20页
Struts+Spring+Hibernate实现上传下载_第2页
第2页 / 共20页
Struts+Spring+Hibernate实现上传下载_第3页
第3页 / 共20页
Struts+Spring+Hibernate实现上传下载_第4页
第4页 / 共20页
Struts+Spring+Hibernate实现上传下载_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Struts+Spring+Hibernate实现上传下载》由会员分享,可在线阅读,更多相关《Struts+Spring+Hibernate实现上传下载(20页珍藏版)》请在金锄头文库上搜索。

1、Struts+Spring+Hibernate实现上传下载引言文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload、Apache的FileUpload。但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了。本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:Struts 1.2Sprin

2、g 1.2.5Hibernate 3.0本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。总体实现上传文件保存到T_FILE表中,T_FILE表结构如下:图 1 T_FILE表结构其中:FILE_ID:文件ID,32个字符,用Hibernate的uuid.hex算法生成。FILE_NAME:文件名。FILE_CONTENT:文件内容,对应Oracle的Blob类型。REMARK:文件备注。文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用Ora

3、cleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的差别,从而撤除程序在多数据库移植上的樊篱。 1首先数据表中的Blob字段在Java领域对象中声明为byte类型,而非java.sql.Blob类型。2数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即Spring所提供的用户自定义的类型,而非java.sql.Blob。 3在Spring中使用

4、org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。以上是SpringHibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。综上所述,我们可以通过图 2,描绘出SSH处理文件上传的方案:图 2 SSH处理文件上传技术方案文件上传的页面如图

5、3所示:图 3 文件上传页面文件下载的页面如图 4所示:图 4 文件下载页面该工程的资源结构如图 5所示:图 5 工程资源结构工程的类按SSH的层次结构划分为数据持久层、业务层和Web层;WEB-INF下的applicationContext.xml为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。本文后面的章节将从数据持久层-业务层-Web层的开发顺序,逐层讲解文件上传下载的开发过程。数据持久层1、领域对象及映射文件您可以使用Hibernate Middlegen、HI

6、bernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:代码 1 领域对象Tfile1. package sshfile.model;2. public class Tfile3.4. private String fileId;5. private String fileName;6. private byte fileContent;7. private String remark;8. /getter and setter9. 特别需要注意的是:数据库表

7、为Blob类型的字段在Tfile中的fileContent类型为byte。Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下:代码 2 领域对象映射文件1. ?xml version=1.0?2. !DOCTYPE hibernate-mapping PUBLIC3. -/Hibernate/Hibernate Mapping DTD 3.0/EN4. http:/ 5. hibernate-mapping6. class name=sshfile.model.Tfile table=T_FILE7. id name=fileId ty

8、pe=java.lang.String column=FILE_ID8. generator class=uuid.hex/9. /id10. property name=fileContent11. type=org.springframework.orm.hibernate3.support.BlobByteArrayType12. column=FILE_CONTENT lazy=true/13. /其它一般字段的映射14. /class15. /hibernate-mappingfileContent字段映射为Spring所提供的BlobByteArrayType类型,BlobByte

9、ArrayType是用户自定义的数据类型,它实现了Hibernate 的org.hibernate.usertype.UserType接口。BlobByteArrayType使用从sessionFactory获取的Lob操作句柄lobHandler将byte的数据保存到Blob数据库字段中。这样,我们就再没有必要通过硬编码的方式,先insert然后再update来完成Blob类型数据的持久化,这个原来难伺候的老爷终于被平民化了。关于lobHandler的配置请见本文后面的内容。此外lazy=true说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tf

10、ile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的洪泛效应。2、DAO编写和配置Spring强调面向接口编程,所以我们将所有对Tfile的数据操作的方法定义在TfileDAO接口中,这些接口方法分别是:findByFildId(String fileId)save(Tfile tfile)List findAll()TfileDAOHibe

11、rnate提供了对TfileDAO接口基于Hibernate的实现,如代码 3所示:代码 3 基于Hibernate 的fileDAO实现类1. package sshfile.dao;2.3. import sshfile.model.*;4. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;5. import java.util.List;6.7. public class TfileDAOHibernate8. extends HibernateDaoSupport implements Tfil

12、eDAO9. 10. public Tfile findByFildId(String fileId)11. 12. return (Tfile) getHibernateTemplate().get(Tfile.class, fileId);13. 14. public void save(Tfile tfile)15. 16. getHibernateTemplate().save(tfile);17. getHibernateTemplate().flush();18. 19. public List findAll()20. 21. return getHibernateTemplat

13、e().loadAll(Tfile.class);22. 23. TfileDAOHibernate通过扩展Spring提供的Hibernate支持类HibernateDaoSupport而建立,HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final Object entity)等等。所以我们的DAO只需要简

14、单地调用父类的HibernateTemplate就可以完成几乎所有的数据库操作了。由于Spring通过代理Hibernate完成数据层的操作,所以原Hibernate的配置文件hibernate.cfg.xml的信息也转移到Spring的配置文件中:代码 4 Spring中有关Hibernate的配置信息1. beans2. !- 数据源的配置 /-3. bean id=dataSource class=mons.dbcp.BasicDataSource4. destroy-method=close5. property name=driverClassName value=oracle.jdbc.driver.OracleDriver/6. property name=url value=jdbc:oracle:thin:localhost:1521:ora9i/7. property name=username value=test/8. property name=password value=test/9. /bean10. !- Hibernate会话工厂配置 /-11.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号