`
李宏喜
  • 浏览: 118754 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2 文件下载及中文乱码问题的解决方案

阅读更多
今天修改了一个一直悬而未决的问题,非常高兴!写下这个解决方案。
一 struts.xml文件的编辑
   <struts>
  <package name="crud-default" extends="convention-default"> 
    <action name="download" class="com.myweb.download.DownLoadAction">
     <!--type 为 stream 应用 StreamResult 处理-->
    <result name="success" type="stream"> 
     <!--默认为 text/plain-->
     <param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
     <!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法, 
比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->
     <param name="inputName">inputStream</param>
     <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 
指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名 -->
     <param name="contentDisposition">attachment;filename="${fileName}"</param>
     <!-- 输出时缓冲区的大小 -->
     <param name="bufferSize">4096</param>
    </result>
    </action> 
   </package>
</struts>
二,com.myweb.download.DownLoadAction 的文件的代码
  public class DownLoadAction extends ActionBase {
    private Logger logger = LoggerFactory.getLogger(DownLoadAction.class);
    private String fileName = null;
    public String execute() throws Exception {
        return "success";
    }
    public InputStream getInputStream() {
      this.fileName = json.substring(json.lastIndexOf("\\") + 1, json.length());
      return Struts2Utils.getSession().getServletContext().getResourceAsStream(json);
    }

    public String getFileName() {
        try {
             Struts2Utils.getResponse().setHeader("charset","ISO8859-1");
             return new String(this.fileName.getBytes(), "ISO8859-1");   
        } catch (UnsupportedEncodingException e) {
            return "获取文件名出现了错误!";
        }
    }
}

遇到的问题:

文件可以下载,但是在websphere环境下,下载的文件的中文名是乱码,解决问题的步骤如下:
第一,修改了struts.xml文件








第二,修改了DownLoadAction.java文件的getFileName方法
public String getFileName() {
      try {
         return new String(this.fileName.getBytes(), "ISO8859-1");   
      } catch (UnsupportedEncodingException e) {
         return "获取文件名出现了错误!";
      }
}

在新弹出IE窗口中,第一次下载时,下载提示框中文仍然是乱码, 再次下载,就可以正常显示中文。整个应用软件包
的默认编码是UTF-8, 在第一次下载之后,客户端浏览器的默认编码被修改为ISO8859-1,再次下载中文就可以正常
显示,因为这时候IE浏览器的字符集编码是西欧ISO



如上图所示,浏览器的默认编码从UTF-8修改为西欧ISO
那我们又该如何解决这个第一次下载时出现乱码的问题呢?

第三,继续修改DownLoadAction.java文件的getFileName方法

  public String getFileName() {
      try {
      
      
       //在服务器端通过设置http Header, 设置了客户端的默认的字符集编码

       Struts2Utils.getResponse().setHeader("charset","ISO8859-1"); 

         return new String(this.fileName.getBytes(), "ISO8859-1");  
      } catch (UnsupportedEncodingException e) {
         return "获取文件名出现了错误!";
      }
    }

附: 如果整体修改为UTF-8下载反而会出现"未知的文件名"的错误提示,http请求中默认的编码有可能是ISO8859-1




  • 大小: 16.3 KB
  • 大小: 13.6 KB
分享到:
评论
1 楼 b5158488 2010-07-13  
谢谢分享 有点感悟

相关推荐

    struts2.2.1文件下载及中文乱码问题解决.pdf

    在使用Struts2进行文件下载功能时,可能会遇到中文乱码的问题。本篇主要讨论如何解决Struts2.2.1版本中文件下载时的中文乱码问题,以及相关的配置和实现细节。 首先,文件下载的关键在于设置正确的HTTP响应头。`...

    struts2文件下载(解决了中文乱码问题)

    在处理文件下载时,Struts2提供了一套完整的解决方案,包括处理中文文件名的乱码问题。在标题提到的场景中,开发者可能遇到了在使用Myeclipse 6.5集成开发环境,JDK1.6和Tomcat 6.0服务器环境下,通过Struts2进行...

    Struts2下载文件中文乱码处理

    ### Struts2下载文件中文乱码处理 在Web开发中,使用Struts2框架进行文件下载操作时,经常遇到的一个问题是文件名中的中文字符显示为乱码。这主要是因为浏览器和服务器之间的编码不一致所导致的。为了确保用户能够...

    struts中文乱码问题解决详细步骤

    解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置Filter** 1. **添加过滤器**:首先,我们需要在Web应用的`web.xml`文件中添加一个`...

    Struts2中文乱码问题最终解决方案

    解决方法是更新Struts2到2.1.8.1或更高版本,并确保使用最新的`StrutsPrepareAndExecuteFilter`过滤器。 3. **GET乱码问题**: GET请求的乱码问题通常与服务器配置有关。在Struts2的各个版本和不同过滤器设置下,...

    struts 2. 5.2解决中文乱码

    在`myStruts`这个压缩包中,可能包含了示例代码、配置文件或测试用例,这些内容可以作为实践上述解决方案的参考。如果你在应用上述步骤后仍然遇到问题,可能需要检查`myStruts`中的具体文件以找出问题所在。例如,...

    struts2配置文件传值中文乱码

    本文将围绕“Struts2配置文件传值中文乱码”这一主题,深入探讨其成因、解决方案以及相关的配置细节,旨在帮助开发者有效解决中文乱码问题,提升用户体验。 ### Struts2框架简介 Struts2是Apache组织下的一个开源...

    struts2中的批量上传与文件下载(解决中文乱码问题)

    本文将详细介绍如何在Struts2框架下实现批量上传与文件下载,并解决中文乱码问题。 一、Struts2文件上传 1. 配置Struts2文件上传支持: 在struts.xml配置文件中,我们需要添加`&lt;constant&gt;`元素来设置允许上传的...

    struts2的中文乱码问题解决

    ### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的挑战。这不仅影响用户体验,还可能导致数据不一致等问题。为了解决这一问题,我们需要理解其背后的原理,并采取...

    Struts2资源文件在jsp页面中显示乱码解决

    通过上述两种解决方案,我们可以有效解决Struts2资源文件在JSP页面中显示乱码的问题。虽然第一种方法可以达到目的,但其带来的维护不便使其不被推荐;相比之下,安装PropertiesEditor插件不仅操作简便,还能彻底解决...

    Struts实现文件下载中文乱码解决方案

    以下是对这个问题的详细分析及解决方案: 首先,问题出现在文件列表的展示和下载链接的生成过程中。在Action中,`request.getRealPath()` 获取了服务器上文件的物理路径,然后遍历目录,将文件名添加到ArrayList中...

    struts2文件上传(解决中文乱码)

    Struts2是一个强大的Java Web...总之,解决Struts2中的中文乱码问题,关键在于配置正确的字符编码,并在文件上传和下载过程中处理好编码转换。通过以上步骤,你可以有效地在Struts2项目中实现对中文URL和文件名的支持。

    struts2上传下载 解决中文文件名乱码

    通过上述实践和调试,我们已经成功解决了Struts2框架下中文文件名上传和下载的乱码问题。在遇到类似问题时,可以按照这些步骤进行排查和修复。记住,关键在于正确配置Struts2的拦截器、请求编码以及在处理文件名时...

    Struts2乱码终极解决办法

    本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...

    奇怪的struts2的中文乱码问题及解决.docx

    本文将深入探讨一个关于Struts2在Internet Explorer(IE)浏览器中出现中文乱码的奇怪问题及其解决方案。 首先,中文乱码问题通常涉及到几个关键因素:数据库编码、开发文件编码和网页的Content-Type编码。在确保这...

    struts 中文乱码问题解决

    本文将深入探讨Struts框架中中文乱码的问题,并提供一系列有效的解决方案。 ### Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,主要用于简化Java Web应用程序的开发。它基于Servlet和JSP...

    struts2中文乱码问题

    ### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的问题。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍几种解决Struts2中文乱码问题的方法。 ####...

    welogic struts2文件下载中文件名乱码:在tomcat中是好的哦

    本文将深入探讨在WeLogic服务器中使用Struts2框架进行文件下载时遇到的文件名乱码问题,并提供详细的解决方案。 ### 文件名乱码现象分析 在WeLogic服务器中使用Struts2进行文件下载时,用户可能会遇到文件名显示为...

    Struts框架下Ajax发送中文乱码问题的解决

    总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...

Global site tag (gtag.js) - Google Analytics