2024年4月26日发(作者:)

Struts2+Spring+Hibernate上传文件

前段时间,我用struts2.1.6、spring2.5、hibernate3.3做了一个文件上传的demo。上

传是通过struts2自带的组件Commons FileUpload文件上传的。上传需要的jar包:

和。

首先了解一下文件上传的原理:

表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:

a 、 application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的

value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。

b 、 multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,

这种编码方式会把文件域指定文件的内容也封装到请求参数里。

c、 text/plain:这种方式主要适用于直接通过表单发送邮件的方式。

上传文件主要是通过读写二进制流进行操作的。

配置很简单,相信网上有很多这方面的资料,我就不再叙述了(最后面引用了网友的对

struts2文件上传的配置)。

主要说明1点:因为spring的bean 默认是单态singleton

的。这样导致一个问题:就是当我们如果上传了一个不允许的类型文件或超出大小范

围的文件,之后再上传正常的文件也上传不了。这时候需要把bean设置为非单态模式:

Java代码

scope="prototype">

ref="busiWlphotodirService">

1. 文件上传的原理:

表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:

1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的

value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。

2) multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,

这种编码方式会把文件域指定文件的内容也封装到请求参数里。

3) text/plain:这种方式主要适用于直接通过表单发送邮件的方式。

文件上传是web应用经常用到的一个知识。原理是,通过为表单元素设置

enctype="multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在

接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实

现文件的上传。

在Java领域中,有两个常用的文件上传项目:一个是Apache组织Jakarta的

Common-FileUpload组件(/fileupload/),另一个是Oreilly

组织的COS框架(/cos/)。利用这两个框架都能很方便的实现

文件的上传。

2. Struts2的文件上传:

Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理

multipart/form-data的请求,它需要调用其他请求解析器,将HTTP请求中的表单域

解析出来。但Struts2在原有的上传解析器基础上做了进一步封装,更进一步简化了文

件上传。

Struts2默认使用的是Jakarta的Common-FileUpload框架来上传文件,因此,要在

web应用中增加两个Jar文件:commons- 和。

它在原上传框架上做了进一步封装,简化了文件上传的代码实现,取消了不同上传框

架上的编程差异。