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

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

 
阅读更多

 

来源:http://www.iteye.com/topic/699246

一、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
分享到:
评论

相关推荐

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

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

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

    在Struts2的各个版本和不同过滤器设置下,GET方式提交的中文乱码问题仍然存在。一种可行的解决方案是在Tomcat服务器的配置文件`server.xml`中,修改`&lt;Connector&gt;`标签,添加`URIEncoding="UTF-8"`属性。这将强制...

    struts 2. 5.2解决中文乱码

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

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

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

    struts2配置文件传值中文乱码

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

    struts2的中文乱码问题解决

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

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

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

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

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

    Struts中文乱码解决方案

    三、请求参数中的中文乱码问题解决方案: 对于用户提交的含有汉字的请求数据导致的乱码,可以通过自定义 RequestProcessor 来解决。首先,创建一个新的类 `SelfRequestProcessor` 继承自 Struts 内置的 `...

    Struts2乱码终极解决办法

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

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

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

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

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

    struts 中文乱码问题解决

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

    struts2中文乱码问题

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

    eclipse下properties文件中文乱码的解决方案

    ### Eclipse下Properties文件中文乱码解决方案详析 在IT开发领域,尤其是使用Eclipse作为集成开发环境(IDE)的开发者,经常会遇到一个令人头疼的问题——Properties文件中的中文字符出现乱码。这一现象不仅影响...

    Struts2.0解决中文乱码

    ### 解决方案:Struts2.0中的中文乱码解决方案 #### 1. 配置struts.properties文件 在Struts2.0中,可以通过修改`struts.properties`文件来指定整个应用的默认字符编码。关键的配置项是`struts.i18n.encoding`,将...

    struts2中文乱码

    本篇文章将详细介绍Struts2中出现中文乱码的原因及解决方案,帮助开发者更好地理解和解决这一问题。 #### 二、Struts2中文乱码问题概述 在Struts2应用中,当处理包含中文字符的数据时,可能会遇到乱码的问题。这种...

    struts1.2 解决中文乱码

    ### Struts 1.2 中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在 Web 应用开发过程中,特别是在使用 Java 的 Struts 1.2 框架时,中文乱码问题是开发者经常遇到的一个难题。这不仅影响用户体验,还会...

    struts2 中文文件名文件下载

    在处理文件上传和下载时,Struts2可能会遇到一个常见的问题,即中文文件名的乱码问题。这是因为不同的系统和软件对字符编码的支持不同,尤其是涉及到网络传输时,编码的兼容性尤为重要。 在“struts2 中文文件名...

    中文乱码问题

    中文乱码问题解决方案 中文乱码问题是 web 开发中经常遇到的问题,特别是在使用 JSP、Servlet、Struts 2 等技术时。乱码问题的出现主要是由于字符编码不一致所致。以下是解决中文乱码问题的知识点: JSP 文件的...

Global site tag (gtag.js) - Google Analytics