SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能

简介: 首先是上传页面(upload.jsp)主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受,[java] view plaincopy       ...

首先是上传页面(upload.jsp)

主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受,

[java]  view plain copy
  1. <s:form action="fileUploadAction" method="post" enctype="multipart/form-data">  
  2.     <s:file name="upload" label="文件名" />  
  3.     <s:textfield name="author" label="上传者" />  
  4.     <s:textfield name="description" label="文件描述" />  
  5.     <s:submit value="上传" />  
  6. </s:form>  

增加一个上传文件的上传文件功能的Action

[java]  view plain copy
  1. package edu.bjtu.resource.action;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. import edu.bjtu.resource.service.ResourceService;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import java.util.Date;  
  10.    
  11. /** 
  12. * 
  13. * @author yilee 
  14. */  
  15. public class FileUploadAction extends ActionSupport {  
  16.    
  17.     private static final long serialVersionUID = 1L;  
  18.     // 代表上传文件的File对象  
  19.     private File upload;  
  20.     // 上传文件名  
  21.     private String uploadFileName;  
  22.     // 上传文件的MIME类型  
  23.     private String uploadContentType;  
  24.     // 上传文件的描述信息  
  25.     private String description;  
  26.     // 保存上传文件的目录,相对于WEB应用程序的根路径,在struts.xml中配置  
  27.     private String uploadDir;  
  28.     //作者  
  29.     private String author;  
  30.     //日期  
  31.     private Date date;  
  32.     //  
  33.     private ResourceService resourceService;  
  34.     //保存结果  
  35.     private String result;  
  36.    
  37.     //省略Getter和Setter方法  
  38.     @Override  
  39.     public String execute() throws Exception {  
  40.    
  41.         // 得到保存上传文件的目录的真实路径  
  42.         File dir = new File("C:\\upload");  
  43.         // 如果该目录不存在,就创建  
  44.         if (!dir.exists()) {  
  45.             dir.mkdirs();  
  46.         }  
  47.    
  48.         int pos = uploadFileName.lastIndexOf(".");  
  49.         uploadContentType = uploadFileName.substring(pos + 1);//文件后缀名  
  50.    
  51.         date = new Date();//当前日期  
  52.    
  53.         InputStream is = new FileInputStream(upload);  
  54.         OutputStream os = new FileOutputStream(new File(dir, uploadFileName));  
  55.         byte[] buf = new byte[1024];  
  56.         int len = -1;  
  57.         while ((len = is.read(buf)) != -1) {  
  58.             os.write(buf, 0, len);  
  59.         }  
  60.         is.close();  
  61.         os.close();  
  62.    
  63.         setUploadDir("C:\\upload");//保存路径  
  64.    
  65.         if (resourceService.saveFile(uploadFileName, uploadDir, author, description, date)) {  
  66.             result = "{suc:1, msg:’上传成功!’}";  
  67.         } else {  
  68.             result = "{suc:0, msg:’上传失败!’}";  
  69.         }  
  70.         return SUCCESS;  
  71.     }  
  72. }  

Service层

核心方法

[java]  view plain copy
  1. public class ResourceServiceImpl implements ResourceService {  
  2.     private ResourceDao resourceDao;  
  3.     //省略Getter和Setter方法  
  4.     public boolean saveFile(String fileName, String fileDir, String author, String description, Date date) {  
  5.         if (resourceDao.save(fileName, fileDir, author, description, date)) {  
  6.             return true;  
  7.         } else {  
  8.             return false;  
  9.         }  
  10.     }  
  11. }  

操作数据库,Dao层

[java]  view plain copy
  1. public class ResourceDaoImpl extends HibernateDaoSupport implements ResourceDao {  
  2.     public boolean save(String fileName, String fileDir, String author, String description, Date date) {  
  3.         resource rs = new resource();  
  4.         rs.setAuthor(author);  
  5.         rs.setDescription(description);  
  6.         rs.setFileDir(fileDir);  
  7.         rs.setFileName(fileName);  
  8.         rs.setDate(date);  
  9.    
  10.         try {  
  11.             getHibernateTemplate().save(rs);  
  12.             return true;  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.             return false;  
  16.         }  
  17.     }  
  18. }  

Model层 资源文件resource.java

[java]  view plain copy
  1. public class resource {  
  2.     private int id;  
  3.     private File doc;//文献  
  4.     private String fileName;//名称  
  5.     private String contentType;//类型  
  6.     private String fileDir;//路径  
  7.     private Date date;//上传日期  
  8.     private String author;//作者  
  9.     private String description;//注释  
  10.     //按需添加属性  
  11.     //省略Getter和Setter方法  
  12. }  

Hibernate映射文件resource.hbm.xml

[java]  view plain copy
  1. <?xml version="1.0″ encoding="UTF-8″?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3. <hibernate-mapping package="edu.bjtu.resouce.model">  
  4.     <class name="edu.bjtu.resource.model.resource" table="resource">  
  5.         <id column="resource_id" name="id" type="integer">  
  6.             <generator class="increment"/>  
  7.         </id>  
  8.         <property column="fileName" name="fileName" type="string"/>  
  9.         <property column="fileDir" name="fileDir" type="string"/>  
  10.         <property column="author" name="author" type="string"/>  
  11.         <property column="description" name="description" type="string"/>  
  12.         <property column="date" name="date" type="date"/>  
  13.      </class>  
  14. </hibernate-mapping>  

Struts配置文件

[java]  view plain copy
  1. <?xml version="1.0″ encoding="UTF-8″ ?>  
  2. <!DOCTYPE struts PUBLIC  
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <!– 上传文件的临时目录 –>  
  7.     <constant name="struts.multipart.saveDir" value="C:\\x"></constant>  
  8.     <!– 上传文件的总大小限制 –>  
  9.     <constant name="struts.multipart.maxSize" value="102400000″></constant>  
  10.     <!– 资源文件配置 –>  
  11.     <constant name="struts.custom.i18n.resources"  
  12.               value="ApplicationResources">  
  13.     </constant>  
  14.     <package name="file"  extends="struts-default">  
  15.         <action name="fileUploadAction" class="fileUploadAction">  
  16.             <result name="success">/successUpload.jsp</result>  
  17.             <param name="uploadDir">/WEB-INF/UploadFiles</param>  
  18.         </action>  
  19.     </package>  
  20. </struts>  

Spring配置文件

[java]  view plain copy
  1. <?xml version="1.0″ encoding="UTF-8″?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/WEB-INF/dtd/spring-beans.dtd">  
  3. <beans default-lazy-init="true">  
  4.     <bean id="resourceDao" class="edu.bjtu.resource.dao.impl.ResourceDaoImpl">  
  5.         <property name="sessionFactory" ref="sessionFactory"></property>  
  6.     </bean>  
  7.    
  8.     <bean id="resourceService" parent="transactionProxy">  
  9.         <property name="target">  
  10.             <bean class="edu.bjtu.resource.service.impl.ResourceServiceImpl">  
  11.                 <property name="resourceDao">  
  12.                     <ref local="resourceDao"/>  
  13.                 </property>  
  14.             </bean>  
  15.         </property>  
  16.     </bean>  
  17.    
  18.     <bean id="fileUploadAction" class="edu.bjtu.resource.action.FileUploadAction" lazy-init="false">  
  19.         <property name="resourceService">  
  20.             <ref local="resourceService"/>  
  21.         </property>  
  22.     </bean>  
  23. </beans>  

上传成功后页面, successUpload.jsp 核心代码

[java]  view plain copy
  1. <h1>上传成功</h1>  
  2. 文件名:<s:property value="uploadFileName" /><br/>  
  3. 文件大小:<s:property value="upload.length()" /><br/>  
  4. 文件类型:<s:property value="uploadContentType" /><br/>  
  5. 上传者 : <s:property value="author" /><br/>  
  6. 文件描述:<s:property value="description" /><br/>  
当然,肯定还需要加各种拦截器,在Struts中,任何Action都需要拦截器.这一文件上传模块中必须新建拦截器,以验证是否登录,验证权限等功能,这里省略拦截器.关于拦截器的详细使用,也许过几天会详细描述.
相关文章
|
9月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
787 2
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
678 4
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
895 1
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
354 0
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
351 2
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
407 32
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
317 0
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1706 8