`
Nightlee
  • 浏览: 67361 次
社区版块
存档分类
最新评论

对于moxie的"WebWork教程"补充 - [文件上传]

阅读更多
以文本方式查看主题

-  胡子鱼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次。
当前模板样式:[默认模板]
分享到:
评论

相关推荐

    WebWork教程开发资料

    **WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork 0.90版本的初稿,涵盖了大部分章节,但未包括"实战G-Roller-WW"和"WebWork与其它开源...

    前端开源库-moxie-zip

    1. **文件上传**:在文件上传功能中,可以先压缩文件,减少网络传输的大小,提高上传效率。 2. **数据备份**:在Web应用中,用户可能需要将数据导出为ZIP文件进行备份或迁移。 3. **下载优化**:将多个资源合并...

    webwork新教程

    WebWork教程是学习这一框架的重要资源,它由moxie(安子)编撰,并在2004年6月29日发布了0.90版本的初稿。 教程的开头部分介绍了WebWork的基本概念,帮助开发者理解其核心理念和工作方式。WebWork的安装过程被详细...

    webwork资料

    在"webwork资料"这个压缩包中,包含了一系列关于WebWork的教程、配置指南和整合其他框架的资源,如Spring和Hibernate。 1. **WebWork之Action配置详解**: WebWork中的Action是处理用户请求的核心组件。Action配置...

    webwork入门(添加注释)

    本教程旨在帮助初学者理解WebWork的工作原理,并通过实例深入学习其核心概念。 **WebWork 介绍** WebWork的核心设计理念是将业务逻辑、数据模型和用户界面分离,使得开发者可以专注于各自领域的实现。WebWork 使用...

    webwork2.0 webwork2.0 帮助文档

    本教程将深入探讨WebWork 2.0的核心概念、安装过程以及常见用法。 ### WebWork 介绍 WebWork 2.0 是一个轻量级的框架,它的主要目标是简化Java Web应用程序的开发。它采用了与Struts类似的MVC模式,但引入了许多...

    moxieJS文件

    moxie.js文件,独立的moxieJS文件,下载后可以直接使用

    plupload2.1.3 文件上传控件

    Plupload 2.1.3 是一款功能强大的文件上传组件,尤其在JavaScript环境下,它提供了高效、稳定且灵活的文件上传解决方案。相比早期的SWFUpload,Plupload 提供了更多的特性和更好的用户体验,适用于现代Web应用的需求...

    Struts2.0学习系列 包括webwork

    而"Webwork2_Guide.rar"和"webwork_moxie.rar"两个压缩包可能包含Webwork2的详细指南和相关工具,帮助深入理解Webwork在Struts2.0中的作用和使用技巧。 通过学习这个系列,你可以掌握如何创建Struts2.0的项目结构,...

    plupload 实现多文件上传

    本示例是关于如何使用Plupload与JSP和Servlet配合,实现多文件上传功能的详细教程。 首先,我们需要了解Plupload的基本结构。Plupload包含前端界面和后端处理两部分。前端界面负责用户交互,如选择文件、显示上传...

    高薪程序员必备刷题软件-u-boot-moxie:moxieu-boot端口的暂存库

    《高薪程序员必备刷题软件:u-boot-moxie 深度解析》 在IT行业中,不断提升自己的技能是获取高薪的关键。其中,对于嵌入式系统开发工程师而言,熟悉并掌握各种bootloader的使用与定制尤为重要。u-boot作为业界广泛...

    支持批量上传、JS图片预览的前端上传组件

    【标题】"支持批量上传、JS图片预览的前端上传组件"所涉及的知识点主要集中在前端开发领域,尤其是文件上传和用户体验优化上。这个组件设计用于处理用户在Web应用中上传多个文件的需求,同时提供了图片预览功能,...

    js插件(jquery,plupload)

    JavaScript 插件是扩展网页功能的强大工具,其中jQuery和plupload是两个非常著名的库,用于增强网站的交互性和文件上传功能。这篇文档将详细介绍这两个插件及其在实际应用中的使用。 首先,jQuery是一个轻量级的...

    moxiedev-releng:Moxie工具的规范文件和相关的发布工程脚本

    《Moxie工具链构建与发布的详尽指南》 Moxie工具链是软件开发领域中的一个重要组成部分,它为开发者提供了...对于任何使用Moxie工具链的项目来说,"moxiedev-releng"都是一个不可或缺的资源库,值得深入研究和应用。

    多图上传及排序整合包

    4. **Moxie.swf** 和 **Moxie.xap**:这两个文件是Plupload组件的一部分,分别用于在不支持HTML5的旧版浏览器(如Flash Player支持的SWF文件)和Silverlight环境下的文件上传功能。它们提供了与浏览器内核不直接支持...

    TCP代理服务moxie.zip

    moxie 是一个用 Python 开发的 TCP 代理服务,可以帮你管理 SSH 通道,并对用户透明。 标签:moxie

    Plupload使用.doc

    Plupload 提供了丰富的特性,如上传进度提示、图片预览、多文件同时上传、文件类型过滤和分块上传等。然而,值得注意的是,这些功能在不同的上传模式下可能存在差异,某些可能仅在特定的运行环境中可用。 **引入与...

    Building Web Application with ArcGIS API for Flex - Moxie Zhang (ESRI Inc.)

    ### 使用ArcGIS API for Flex构建Web应用程序 #### 引言 随着信息技术的不断发展与进步,地理信息系统(GIS)的应用越来越...对于希望在地理信息系统领域有所作为的开发者来说,掌握并运用这一技术将是十分有益的。

    rui5t:使用Moxie对UI5进行实验性Rust绑定

    【标题】"rui5t:使用Moxie对UI5进行实验性Rust绑定" 指的是一项创新性的技术实践,旨在将Rust语言的强类型、高性能特性和UI5(SAP的开放源代码JavaScript框架)相结合,通过Moxie库实现两者之间的互操作性。...

    人工智能公司Embodied推出教育机器人Moxie.pdf

    人工智能公司Embodied推出教育机器人Moxie.pdf

Global site tag (gtag.js) - Google Analytics