`
cucuchen520
  • 浏览: 73887 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

webwork jakarta 上传乱码解决方案

阅读更多
在使用webwork2.1的时候,我的jsp全是用的UTF-8国际编码,而我的系统是gbk环境,这时候如果用jakarta上传文件的时候,无论是单个还是多个,只是要中国字全是乱码???怎么办???经过我深入研究它的源代码,发现在
com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest里面有一个名叫public JakartaMultiPartRequest(HttpServletRequest servletRequest, String saveDir, int maxSize)
            throws IOException
这个方法出了问题!原因如下,它在调用DiskFileUpload组件的时候,没有设置其编码,按照惯例,如不设置编码即为系统编码,因为我的系统编码是gbk,很显然地与utf-8出现了冲突.怎么办?改掉它.
 
/**
 * Multipart form data request adapter for Jakarta's file upload package.
 *
 * @author Bruce Ritchie
 */
public class JakartaMultiPartRequest extends MultiPartRequest {
    //~ Instance fields ////////////////////////////////////////////////////////
    // maps parameter name -> List of FileItem objects
    private Map files = new HashMap();
    // maps parameter name -> List of param values
    private Map params = new HashMap();
    //~ Constructors ///////////////////////////////////////////////////////////
    /**
     * Creates a new request wrapper to handle multi-part data using methods adapted from Jason Pell's
     * multipart classes (see class description).
     *
     * @param maxSize        maximum size post allowed
     * @param saveDir        the directory to save off the file
     * @param servletRequest the request containing the multipart
     */
    public JakartaMultiPartRequest(HttpServletRequest servletRequest, String saveDir, int maxSize)
            throws IOException {
        DiskFileUpload upload = new DiskFileUpload();
        // we must store all uploads on disk because the ww multipart API is missing streaming
        // capabilities
        upload.setSizeThreshold(0);
        upload.setSizeMax(maxSize);
        //以下是我加的
        String charset = servletRequest.getCharacterEncoding();
        if (charset != null) {
               upload.setHeaderEncoding(charset);
          }
        //以上是我加的
        if (saveDir != null) {
            upload.setRepositoryPath(saveDir);
        }
        // Parse the request
        try {
            List items = upload.parseRequest(servletRequest);
            for (int i = 0; i < items.size(); i++) {
                FileItem item = (FileItem) items.get(i);
                log.debug("Found item " + item.getFieldName());
                if (item.isFormField()) {
                    log.debug("Item is a normal form field");
                    List values = null;
                    if (params.get(item.getFieldName()) != null) {
                        values = (List) params.get(item.getFieldName());
                    } else {
                        values = new ArrayList();
                    }
                    // note: see http://jira.opensymphony.com/browse/WW-633<wbr></wbr>
                    // basically, in some cases the charset may be null, so
                    // we're just going to try to "other" method (no idea if this
                    // will work)
                    //将下面这句话提前.
                    //String charset = servletRequest.getCharacterEncoding();
                    if (charset != null) {
                        values.add(item.getString(charset));
                    } else {
                        values.add(item.getString());
                    }
                    params.put(item.getFieldName(), values);
                } else if (item.getSize() == 0) {
                    log.debug("Item is a file upload of 0 size, ignoring");
                } else {
                    log.debug("Item is a file upload");
                    List values = null;
                    if (files.get(item.getFieldName()) != null) {
                        values = (List) files.get(item.getFieldName());
                    } else {
                        values = new ArrayList();
                    }
                    values.add(item);
                    files.put(item.getFieldName(), values);
                }
            }
        } catch (FileUploadException e) {
            log.error(e);
        }
    }
 
经过以上修改,然后再到web.xml里面配置一个SetCharacterEncoding的过滤器并设置其编码为UTF-8就OK了...
分享到:
评论
1 楼 skywalker 2007-09-28  
webwork2.2.4以后已经解决了乱码问题

相关推荐

    webwork的上传和下载的Demo

    在Web开发中,文件上传和下载是常见的功能需求,本Demo展示了如何在WebWork框架下实现这两个操作。 首先,我们要理解上传和下载的基本原理。文件上传是指用户通过Web表单选择本地文件,然后将其发送到服务器的过程...

    webwork中上传文件

    在本例中,我们关注的是使用WebWork框架在Java环境中实现文件上传。WebWork是一个轻量级的MVC(Model-View-Controller)框架,它提供了处理HTTP请求和响应的强大工具,包括文件上传。 首先,我们需要了解WebWork的...

    webwork文件上传

    在本教程中,我们将探讨如何利用WebWork实现文件上传功能,特别是针对Excel文件的处理。 首先,理解WebWork的MVC模式至关重要。在WebWork框架中,控制器负责接收用户请求,调用业务逻辑,并将结果传递给视图进行...

    webwork 上传的例子

    这个是我查看了大量的网上文档后,利用webwork的上传机制写的一个上传到例子。因为网上很多都转来转去的文档。能不能不运行,还不一定。改起来很费时,所以我把我写的上传上去。力争做到用最少的代码和简单配置来...

    WebWork 文件上传

    在这个“WebWork 文件上传 多个文件上传 范例”中,我们将深入探讨如何使用WebWork实现多文件上传的功能。 首先,了解文件上传的基本原理是必要的。在HTTP协议中,文件上传通常通过POST请求实现,其中包含了...

    WebWork深入浅出.doc

    基于三层架构的Web层需要解决十个关键问题,WebWork提供了相应的解决方案: 1. 数据输入:WebWork通过请求参数绑定技术获取HTTP数据,并自动将字符数据转换为模型对象。 2. 输入验证:利用内置的验证机制,可以对...

    解决方案:webwork checkboxlist遍历双重list,并设置选中

    `webwork`是一个经典的Java Web框架,它提供了丰富的控制层功能,帮助开发者更好地管理请求和模型数据。本篇文章将深入探讨如何在Webwork中处理双重列表(list within a list)中的checkboxlist,并设置选中状态。 ...

    webwork 文件上传下载

    本篇文章将围绕"webwork 文件上传下载"这个主题,深入探讨WebWork框架下如何实现文件的上传和下载。 首先,让我们了解文件上传的基本概念。在Web应用中,文件上传通常涉及HTML表单、HTTP协议和服务器端处理。在...

    webwork

    此外,文档可能还会介绍一些最佳实践和常见问题的解决方案,帮助你深入理解和掌握WebWork2框架的使用。通过这份指南,你可以系统地学习和提升在WebWork框架下的开发技能,为构建高质量的Web应用打下坚实的基础。

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...

    webwork详细讲解.doc

    虽然原文件中没有详细介绍G-Roller-WW的实际应用案例,但这一部分可能涉及如何将WebWork与G-Roller(一个博客平台)结合使用,包括集成JSTL、解决中文问题等。 #### WebWork与其它开源项目的集成 WebWork可以与...

    webwork的jar包

    WebWork与Hibernate的结合可以提供一个完整的MVC+ORM解决方案,让开发者更专注于业务逻辑,而不是底层的数据库交互。 在提供的文件列表中,"lib"可能是一个包含其他依赖库的文件夹,这些库可能包括Spring、...

    webWork

    5. 解决问题:常见问题和解决方案,帮助开发者解决开发过程中遇到的问题。 通过深入学习"webWork学习文档",开发者不仅可以掌握WebWork的基本使用,还能了解其背后的架构设计,从而更好地利用这一框架来构建高效、...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    webwork2个人学习总结

    Webwork2是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中提供了一种组织和管理代码的方式。以下是对Webwork2框架的学习总结: 1. **JAR包下载与项目配置**: - 开始学习Webwork2时,首先需要...

    webwork电子书

    它可能涵盖了与"Webwork2 Guide"相似但翻译成中文的内容,帮助读者理解Webwork的各个方面,同时也可能包括一些中文社区的使用经验或特定问题的解决方案。 在阅读这两个文档时,你将了解到如何利用Webwork创建各种...

    WebWork教程开发资料

    **WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork ...对于想要深入研究WebWork或者寻求Java Web开发解决方案的人来说,这是一个宝贵的资源。

    webwork资源

    例如,Spring框架提供了全面的解决方案,而Struts拥有丰富的资源,Tapestry以其组件化见长,JSF则接近于ASP.NET的开发体验。 总的来说,WebWork资源对于有Java基础并且有一定Web开发经验的开发者来说是非常有价值的...

    WebWork2.0讲解说明

    WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...

Global site tag (gtag.js) - Google Analytics