struts与hibernate实现文件的上传与动态下载

Struts和Hibernate是两个在Java Web开发中常用的框架。Struts主要用于MVC(Model-View-Controller)架构,提供了一种组织应用程序的方式,而Hibernate是一个对象关系映射(ORM)工具,用于简化数据库操作。本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及Hibernate3.6.0.Final。这些库文件的下载和配置是基础步骤,确保所有依赖都已添加到项目类路径中。 2. **临时文件存储路径**:在Struts的配置文件中,你需要更改默认的临时文件存储路径,例如`<constant name="struts.multipart.saveDir" value="F:\\ITtools\uploads"/>`。这个配置决定了在文件上传过程中,临时文件的存储位置。 3. **文件存储路径**:在Action中,使用`<param name="savePath">/upload</param>`指定保存文件的最终路径。在实际项目中,需要在Web应用的根目录下创建一个名为`upload`的文件夹,以便保存上传的文件。 4. **核心代码**:文件上传的核心在于处理输入流和输出流。客户端通过HTTP请求发送文件,服务器端接收并写入到指定的文件系统位置。以下是一个简单的上传示例: ```java final String numberName = getNumberFileName(); FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + numberName); FileInputStream fis = new FileInputStream(getUpload()); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } ``` 其中,`getUpload()`返回上传文件的输入流,`getSavePath()`返回文件保存的路径,`getNumberFileName()`则是生成一个唯一文件名的方法,通常基于当前时间戳,避免文件重名。 5. **JSP页面**:在用户界面,需要一个HTML表单来让用户选择文件。Struts2提供了标签库,如`<s:file>`用于文件上传字段: ```jsp <form action="upload.action" method="post" enctype="multipart/form-data"> <p align="left">文件标题:<input type="text" name="title"></p> <p align="left">选择文件:<s:file name="upload"/></p> <p align="left">文件描述:<textarea rows="4" name="filedescrib" cols="40"></textarea></p> ... </form> ``` **二、文件下载** 1. **动态下载**:下载文件时,服务器需要读取存储的文件并将其通过HTTP响应发送给客户端。关键在于构建正确的输出流,并设置响应头以指示浏览器进行下载操作。 2. **处理中文文件名**:为了解决中文文件名的乱码问题,可以生成一个基于时间戳的唯一文件名,例如在`getNumberFileName()`方法中。 3. **下载代码**:在Action中,创建一个输入流读取文件,然后通过Servlet的`response.getOutputStream()`创建输出流,将文件内容写入到响应中: ```java response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); FileInputStream fis = new FileInputStream(filePath); // 将文件内容写入到响应中 byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) != -1) { response.getOutputStream().write(buffer, 0, length); } ``` 4. **Action配置**:在Struts2的配置文件中,需要为下载操作配置相应的Action和结果。 **三、整合Struts与Hibernate** 1. **持久化文件信息**:为了实现动态下载,可能需要将文件信息(如文件名、上传时间、描述等)存入数据库。这可以通过Hibernate完成。创建对应的实体类,映射到数据库表,然后在Action中使用Hibernate的Session进行CRUD操作。 2. **查询与下载链接**:在页面上,显示文件列表,每个文件条目包含一个下载链接,链接指向下载Action,传入文件ID。Action根据ID查询数据库,然后执行上述下载流程。 通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑安全性、错误处理和性能优化等问题。












剩余14页未读,继续阅读

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络营销理论基础与环境概述.pptx
- 五基于ARM的嵌入式系统硬件结构设计.pptx
- C语言程序设计酒店管理系统实验报告.doc
- 论新形势下的网络群防群治工作.doc
- 网络环境的专题教学研究与教学设计.pptx
- 考勤机软件说明书.doc
- 个人云端文件存储与管理系统设计实现
- 酒店用品网网站策划方案.doc
- 东软数据库三级项目.doc
- 关于计算机的心得体会.docx
- 校园网络监控建设方案.doc
- 老年公寓综合信息管理服务系统 老年公寓智能化运营管理系统平台 老年公寓住户与服务综合管理系统 现代化老年公寓一体化管理信息系统 老年公寓住宿与服务综合管理系统 老年公寓老年公寓全面信息化管理系统 老年
- 在线测试管理系统的设计与实现
- java毕业设计,产品售后管理系统
- 分布式智能系统中的协调策略与挑战
- java毕业设计,智能小区管理系统



- 1
- 2
前往页