网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.最佳J2EE方案讨论之O-R Mapping.
.专家释疑:轻松提高Java代码的性.
.J2EE项目10大风险.
.在3D MIDlet应用程序中运用动画材.
.Eclipse插件实现Axis WebService.
.头文件生成器-javah.exe.
.java初学——兴奋而且难忘的一课.
.多态与面向对象(二).
.1年Java历程的回顾、反思与展望(.
.Java新消息:JRuby将集Java和RoR.
.作了个小测试equals 和==.
.Eclipse 3.1 M3 快捷键.
.浅谈Java的标准数据流.
.创建 JSF Web 项目和页面模板(1.
.初学java应该注意的地方.
.Java数据压缩格式程序设计方法.
.Jbuilder5下调试得到主机ip的全过.
.Web框架wingS发布 2.0 版本.
.我学swing的故事.
.在图形编程中用TextLayout精确绘.

Struts+Spring+Hibernate实现上传下载

发表日期:2008-1-5



  引言

  文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个闻名的大件:如SmartUpload、Apache的FileUpload。但假如您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得粗笨而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了。

  本文将围绕SSH文件上传下载的主题,向您具体讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:

  ·Struts 1.2

  ·Spring 1.2.5

  ·Hibernate 3.0

  本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如mysql,SQLServer等。

  总体实现

  上传文件保存到T_FILE表中,T_FILE表结构如下:

Struts+Spring+Hibernate实现上传下载(图一)
图 1 T_FILE表结构

  其中:

  ·FILE_ID:文件ID,32个字符,用Hibernate的uuid.hex算法生成。

  ·FILE_NAME:文件名。

  ·FILE_CONTENT:文件内容,对应Oracle的Blob类型。

  ·REMARK:文件备注。

  文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理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中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。

  通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。

  以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。

  综上所述,我们可以通过图 2,描绘出SSH处理文件上传的方案:

Struts+Spring+Hibernate实现上传下载(图二)
图 2 SSH处理文件上传技术方案

  文件上传的页面如图 3所示:

Struts+Spring+Hibernate实现上传下载(图三)
图 3 文件上传页面

  文件下载的页面如图 4所示:

Struts+Spring+Hibernate实现上传下载(图四)
图 4 文件下载页面

  该工程的资源结构如图 5所示:

Struts+Spring+Hibernate实现上传下载(图五)
图 5 工程资源结构

  工程的类按SSH的层次结构划分为数据持久层、业务层和Web层;WEB-INF下的applicationContext.XML为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。

  本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。

  数据持久层

  1、领域对象及映射文件

  您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:

  代码 1 领域对象Tfile


上一篇:编程经典技术:Spring的巧妙之处 人气:624
下一篇:Spring Framework中的面向方面编程一 人气:544
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐