仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 946|回复: 19
打印 上一主题 下一主题

[学习教程] 发布一篇Struts2文件上传(二) 深切FileUploadInterceptor

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:31:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
Struts2框架自己没有文件上传的功效模块,而是使用如今盛行的几个文件上传开源框架,如Common-FileUpload和COS等。Struts2使用拦阻器将这些文件上传的框架奇妙的集成出去,不克不及不被称为一个优异的拿来主义者。因为拦阻器的利用,我们利用Struts2完成文件上传变的十分简单,仿佛甚么也没产生,文件已上传到服务器了,但假如仅仅是利用这个功效,大概永久不晓得Struts2为你做了几事变。比来有点闲,剖析了下下Struts2源码,才弄分明个中的原形,条记一下,以避免忘记。
Struts2使用request剖析器来集成其他的文件上传框架,Struts2供应了默许的request剖析器JakartaMultiPartRequest,在default.properties的struts.multipart.parser参数就是设置request解析器,默许为jakarta也就是JakartaMultiPartRequest。固然,你也能够设置成cos,不外Struts2没有供应适配cos的request剖析器,你得本人完成,然后设置到本人的使用。JakartaMultiPartRequest也就是使用Common-FileUpload来对request举行剖析,然后保留剖析了局。详细事情就是使用Common-FileUpload的ServletFileUpload对request举行剖析,失掉一切的FileItem的list,然后对这个list进行剖析。假如是文件上传表单,则以表单的name属性分组,以表单name属性为key,对应的FileItem列表为Value保留到一个Map中。JakartaMultiPartRequest的事情已完成,固然,这个Map中保留的一切的FileItem,框架已将文件保留到一个一时目次里了,这个一时目次你也能够设置,参数为struts.multipart.saveDir,还要设置一个文件上传总巨细,参数为struts.multipart.maxSize。
接着就是FileUploadInterceptor的事情了,他的事情也十分复杂。起首举行考证,如文件上传巨细限定,上传范例限定考证等。然后以表单名来机关三个参数,比方:你的文件上传表单name为upload,则这三个参数为:upload,uploadContentType,uploadFileName。然后保留到ActionContext的PARAMETERS中,固然假如表单良多,并且表单名又分歧,他就会发生分歧表单名对应的参数。最初体系的ParametersInterceptor拦阻器会将ActionContext的getParameters()失掉的各个参数映照赋值给Action的各个属性,这就是为何我们在开辟文件上传的时分必定要在Action中供应与表单名不异的File对象(假如一个表单名又多个上传文件,这是能够是File数组或是File的List),文件名+ContentType,和文件名+FileName这三种参数。
框架为我们所做的就是这些了,剩下的就是文件拷贝了。如今我们来注重下Action的这几个参数,个中File对象(固然也多是数组或List),这时候他们已指向体系一时目次里的某个文件,或是体系的内存里的数据了。在我们传输数据时,实践上是从这个一时文件或内存将数据库拷贝到上传目次里往的,当实行完Action以后,FileUploadInterceptor会将一时目次里一切一时文件删除,这也是为何上传文件完成后会有一些日记显现说删除一些一时文件的缘故原由。
如今完成一个复杂的文件上传,起首熟习下几个参数设置:
1.struts.multipart.parser 设置request剖析器,Struts2默许为jakarta也就是JakartaMultiPartRequest,我们也能够本人开辟本人的剖析器。
2.struts.multipart.saveDir 上传文件的一时保留目次,我们晓得Common-FileUpload必要供应一个一时目次的。假如没有设置,则是ServletContext.getAttribute("javax.servlet.context.tempdir")对应的目次,对应于Common-FileUpoad中的repository参数。
3.struts.multipart.maxSize这个是设置文件上传总巨细,单位为B,默许巨细为2097152b,对应于Common-FileUpload中的sizeMax参数。
在设置FileUploadInterceptor时分也有几个参数:
1.maximumSize 这是设置同意上传的单个文件的巨细,假如某个文件巨细年夜于这个巨细,则会发生一个毛病保留到Action中,毛病的i18n的key为struts.messages.error.file.too.large
2.allowedTypesSet这是设置同意上传文件的范例,多个范例以逗号“,”离隔,假如某个文件的范例没在这个设置之类,则会发生一个毛病保留到Action中,毛病的i18n的的key为struts.messages.error.content.type.not.allowed
3.allowedExtensionsSet这是设置同意上传文件的后缀,多个范例以逗号“,”离隔,假如某个文件的后缀没在这个设置之类,则会产生一个毛病保留到Action中,毛病的i18n的的key为struts.messages.error.file.extension.not.allowed
struts.xml设置示例:
Xml代码
<struts>
//设置文件保留的一时目次
<constant name="struts.multipart.saveDir" value="C:Documents and SettingsondMy Documents        emp"></constant>

//设置上传总巨细
<constant name="struts.multipart.maxSize" value="1024102400"></constant>

<package name="strutsDemo" extends="struts-default">

<action name="Upload" method="upload" class="com.bond.action.LoginAction">
//文件上传的保存目次
<param name="savePath">/upload</param>
<result name="success">/success.jsp</result>
<result name="error">/failure.jsp</result>
<interceptor-ref name="fileUpload">
//单个文件同意的巨细
<param name="maxinumSize">10240000000</param>
//同意上传的文件范例,能够到%Tomcat_home%/conf下的web.xml文件中找到一切文件范例的范例名
<param name="allowedTypesSet">application/zip,application/pdf,image/gif</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
这里我们设置了fileUpload拦阻器,我们还必需吧dufaultStack加上,因为defaultStack中已包括了fileUpload拦阻器,以是fileUpload拦阻器会实行俩遍,以是我们会在日记信息中看到俩次扫除一时文件的纪录。
<p>
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的
海妖 该用户已被删除
沙发
发表于 2015-1-21 09:36:00 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
简单生活 该用户已被删除
板凳
发表于 2015-1-25 09:45:37 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
若相依 该用户已被删除
地板
发表于 2015-2-2 18:29:59 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
小女巫 该用户已被删除
5#
发表于 2015-2-4 13:23:29 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
金色的骷髅 该用户已被删除
6#
发表于 2015-2-7 07:30:41 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
小魔女 该用户已被删除
7#
发表于 2015-2-10 02:55:21 | 只看该作者
是一种为 Internet发展的计算机语言
因胸联盟 该用户已被删除
8#
发表于 2015-2-28 16:48:48 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
变相怪杰 该用户已被删除
9#
发表于 2015-3-10 01:25:32 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
分手快乐 该用户已被删除
10#
发表于 2015-3-10 12:58:13 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
乐观 该用户已被删除
11#
发表于 2015-3-17 07:11:27 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
爱飞 该用户已被删除
12#
发表于 2015-3-22 04:07:40 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
山那边是海 该用户已被删除
13#
发表于 2015-3-29 02:49:39 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
灵魂腐蚀 该用户已被删除
14#
 楼主| 发表于 2015-3-29 12:53:18 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
谁可相欹 该用户已被删除
15#
发表于 2015-4-4 03:46:50 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
冷月葬花魂 该用户已被删除
16#
发表于 2015-4-7 11:19:49 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
透明 该用户已被删除
17#
发表于 2015-4-11 15:11:46 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再现理想 该用户已被删除
18#
发表于 2015-4-22 08:45:01 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
愤怒的大鸟 该用户已被删除
19#
发表于 2015-4-29 18:42:37 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
飘飘悠悠 该用户已被删除
20#
发表于 2015-5-3 20:35:20 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 08:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表