以文本方式查看主题
- 胡子鱼JAVA FANS论坛 (http://www.3doing.net/forums/index.asp)
-- 『 WebWork2 』 (http://www.3doing.net/forums/list.asp?boardid=62)
---- 对于moxie的"WebWork教程"补充 - [文件上传] (http://www.3doing.net/forums/dispbbs.asp?boardid=62&id=752)
--------------------------------------------------------------------------------
-- 作者:胡子鱼
-- 发布时间:2005-7-15 18:07:45
-- 对于moxie的"WebWork教程"补充 - [文件上传]
WebWork利用ognl实现的资料绑定是非常实用的功能, 能够避免繁琐调用request.getParameter, object setter, 也不需要任何的多余配置文件, 再加上转换器的功能( http://forum.iteye.com/viewtopic.php?t=10507 ), 我们就可以用一个业务对象, 从前台一直串到后台, 再也不需要考虑String转化, 不需要DTO, 不需要FormBean了.
如果能够把web应用上常见的上传文件也用数据绑定来实现, 那么就是非常完美了: action再也不需要了解任何web信息, 需要对具体的Object进行操作, 就调用getObject, 需要对用户上传的文件进行操作, 就调用getFile.
在webwork2.1.5以前, wiki上有一篇文档: http://wiki.opensymphony.com/display/WW/File+Upload+Interceptor, 介绍了如何实现这种做法, 在2.1.5以后, 这个拦截器被加入了正式release版本里面: com.opensymphony.webwork.interceptor.FileUploadInterceptor
先来看一下我们的Action:
java代码:
public class Upload implements Action {
private File[] uploadFiles;
public String execute() throws Exception {
//store uploadFiles ...
}
public void setUploadFiles(File[] uploadFiles) {
this.uploadFiles = uploadFiles;
}
}
我们可以看到这个Action相当的简单, 只要定义一个File类型的属性以及setter, 我们就可以用这个File对象来作任何事情了.
页面和普通的upload页面没有区别:
java代码:
<form .... enctype="multipart/form-data">
....
File 1: <input type="file" name="uploadFiles">
File 2: <input type="file" name="uploadFiles">
<form>
需要注意栏位名称和Action的属性同名就可以了, 剩下的事情就是配置拦截器:
xml代码:
<interceptors>
<interceptor name="upload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/>
<interceptor-stack name="uploadStack">
<interceptor-ref name="upload"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="doUpload" class="yourPackage.Upload">
<interceptor-ref name="uploadStack"/>
<result name="success">...</result>
</action>
除此之外, 这个拦截器还提供了额外的信息: ContentType和FileName供我们使用:
[File Name]ContentType: 文件的ContentType(可以用在做download的时候)
[File Name]FileName: 实际的文件名
在上面的action例子里, 那么有uploadFilesContentType和uploadFilesFileName这2个属性, 也能够被自动绑定.
具体的代码可以参考webwork的upload example
结论:灵活运用拦截器可以让原本复杂,繁琐的工作变得轻松,简单.
====================================
我补充几点:
webwork的文件上传实际上是封装了几种通用的File Upload lib,并不是自己实现的,这它包括了pell,cos,apache common三种实现。
cos是oreilly的包,访问地址在http://servlets.com
cos包的功能是最全面的,也是我最喜欢用的文件上传lib
apache common 是apache的common中的一个
pell的来源我没有考证过。
webwork对这三个包的封装有些类似apache common logging,提供了一个通用的访问接口,至于具体用什么,则在webwork.properties中配置。
就我的经验来看,如果你直接使用Webwork的FileUpload拦截器,我一定推荐你使用pell,因为当你上传中文文件名称的文件的时候,只有pell包会正确的获得中文文件名称,apache common会将文件名称改为xxxxxxx.tmp这样的文件名,而cos会乱码,因此我们唯一的选择只有pell。
我不了解pell和apache common,但是webwork的封装丧失了很多cos的功能。cos需要设置request的character encoding,但是webwork的封装没有设置,所以就导致了cos的乱码问题,当然如果你单独使用cos,则会避免此类问题。
在webwork的file upload 拦截器功能中,它提供的File只是一个临时文件,Action执行之后就会被自动删除,因此你必须在Action中自己出来文件的存储问题,或者写到服务器的某个目录,或者保存到数据库中。如果你准备写到服务器的某个目录下面的话,你必须自己面临着处理文件同名的问题,但是实际上cos包已经提供了文件重名的自动重命名规则。
因此我的建议是不复杂的应用直接使用webwork的拦截器,复杂的应用自己写拦截器调用cos来完成。
====================================
http://forum.iteye.com/viewtopic.php?t=10697&postdays=0&postorder=asc&start=0
--------------------------------------------------------------------------------
Powered By :Dvbbs Version 7.0.0 Sp2
Copyright &2002 - 2005 MustFish.com
执行时间:109.37500毫秒。查询数据库3次。
当前模板样式:[默认模板]
分享到:
相关推荐
前端开源库-moxie-zipMoxie Zip,又一个Zip库
webwork_moxie.rar相关ppt Webwork之Action配置详解 让webwork2零配置
moxie.js文件,独立的moxieJS文件,下载后可以直接使用
moxie 是一个用 Python 开发的 TCP 代理服务,可以帮你管理 SSH 通道,并对用户透明。 标签:moxie
莫西更多信息有关moxie项目的更多信息,请。贡献和行为准则有关总体贡献信息,请参见 ;有关该项目的行为准则,请参见 。 该项目仍处于生命周期的早期,但我们欢迎有兴趣参与的任何人。执照根据以下任一许可由您选择...
人工智能公司Embodied推出教育机器人Moxie.pdf
mOxie 是我们提取的 XHR2 和 File API pollyfills 的组合名称,目的是使其更加灵活并为其提供进一步发展的机会。 但是现在pollyfills是分开的,它们可以独立使用。 XHR2 和 File API pollyfills 是多运行时的,这...
rui5t:使用Moxie对UI5进行实验性Rust绑定
在使用plupload上传文件时需要用到的插件,在我的一篇文章中实现了同一jsp中创建多个上传控件的demo,有需要的可以看看
用于构建和发布Moxie工具链的工具 请参阅脚本目录以获取有用的脚本。 工具链发布在这里:[ ]。
Android-SSL-Pinning 一个实现 Moxie 的 SSL Pinning 库的示例 android 应用程序
有致力于flex在地理方面的应用的朋友可以看看这个资源,更多的信息最好去esri的官方网站,那里有源代码,还有效果,很棒的!
如果您选择Elite Insights HTML文件,则moxie会尝试对其进行解析,但缺少一半的增益,因此它将无法向您大喊大叫。 致谢 多亏了是出色的EVTC解析器,生成了EVTC并提供了全面的文档,感谢提供了大多数基准日志,并且...
高薪程序员必备刷题软件
Moxie Native 警告:这是一项正在进行的工作,尚不适用于非平凡的应用程序。 这是用于构建用Rust编写的GUI应用程序的框架。 它使用Webrender进行渲染,而不是依赖于其他UI工具包(例如Gtk)或Web浏览器。 这使您...
Spring教程 作者:钱安川(Moxie)
作者:钱安川(Moxie) 注:后面的内容我将不再完善,但网上的朋友可以帮助完善,只需注明住处即可。 Spring教程 1 Spring框架概述 3 Spring是什么? 3 Spring的历史 4 Spring的使命(Mission Statement) 4 ...
xocolatl 设置与设置方式相同。xocolatl 用法别。 现在这真的只适用于开发人员。 我是认真的。
请大家不要私自更改文件,解压密码为moxie
matlab代码做游戏已加星标 [Emacs Lisp](#emacs lisp) [Jupyter笔记本](#jupyter笔记本) [POV-Ray SDL](#pov-ray ...-用于moxie处理器核心的工具,运行时代码和HDL源。 -简单的快速迭代器,可从bitcoind