`
xudongcsharp
  • 浏览: 477140 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决struts2.0下载中文文件名乱码问题

阅读更多
出自:http://hi.baidu.com/vhook/blog/item/d1791e9a5743b3b2c9eaf4ab.html

struts2多文件动态下载及中文乱码2009-02-17 12:03关于文件上传的例子,网上已经有很多,所以本文就不谈文件上传,重点是文件下载及文件名为中文的时候各个浏览器出现乱码的解决方案。

下面是jsp文件的代码:

<html>
<head>
   <title>download</title>
</head>
<body>
   <%
//取得服务器"/download/file"目录的物理路径
String path = request.getRealPath("/download/file");
//取得"/download/file"目录的file对象
File file = new File(path);
//取得file目录下所有文件
File[] files = file.listFiles();

   for (int i = 0; i < files.length; i++) {

String fname = files[i].getName();

//对文件名进行url编码(UTF-8指明fname原来的编码,UTF-8一般由本地编码GBK代替)
   fname = java.net.URLEncoder.encode(fname, "UTF-8");

out.println("<a href=download.action?name=" + fname + ">"
   + files[i].getName() + "</a><br>");
}
   %>
</body>
</html>

相应的DownloadAction.java的代码:

package com.test.action;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

public class DownloadAction extends ActionSupport {
   private static final long serialVersionUID = 6329383258366253255L;

   private String fileName;

   public void setFileName(){
   //得到请求下载的文件名
   String fname=ServletActionContext.getRequest().getParameter("name");
   try {
   /*
* 对fname参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码,本机为GBK。
* 这里使用request.setCharacterEncoding解码无效.
* 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
* */  
   fname = new String(fname.getBytes("ISO-8859-1"), "UTF-8");

   } catch (Exception e) {
   e.printStackTrace();
}  
this.fileName=fname;  
System.out.println(fileName);
}

   /*
* @getFileName
* 此方法对应的是struts.xml文件中的:
* <param name="contentDisposition">attachment;filename="${fileName}"</param>
* 这个属性设置的是下载工具下载文件时显示的文件名,
* 要想正确的显示中文文件名,我们需要对fileName再次编码
* 否则中文名文件将出现乱码,或无法下载的情况
* */
public String getFileName() throws UnsupportedEncodingException {
  
fileName=new String(fileName.getBytes(),"ISO-8859-1");
  
return fileName;
}

   /*
   * @getDownloadFile
   * 此方法对应的是struts.xml文件中的:
   * <param name="inputName">downloadFile</param>
   * 返回下载文件的流,可以参看struts2的源码
   * */
public InputStream getDownloadFile() {
  
   this.setFileName();

   return ServletActionContext.getServletContext().getResourceAsStream("/download/file/" + fileName);
}

   @Override
public String execute() throws Exception {
return SUCCESS;
   }
}
struts.xml相应的Action配置:

<action name="download" class="com.test.action.DownloadAction">
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">downloadFile</param>
</result>
   </action>
web.xml:

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>download.jsp</welcome-file>
</welcome-file-list> 
分享到:
评论

相关推荐

    Struts2.0解决中文乱码

    本文将深入探讨如何在Struts2.0中解决中文乱码问题,确保应用程序能够正确地处理和显示中文字符。 ### Struts2.0中文乱码问题分析 #### 1. 表单提交中文乱码 在Web应用中,表单是用户与服务器交互的主要方式之一...

    struts2.0中文教程

    01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解 04 在Struts 2.0中国际化(i18n)您的应用程序 05 转换器(Converter)——Struts 2.0中的魔术师 06 在Struts 2.0中实现表单...

    Struts2.0视频教程+struts2.0中文教程

    这个"Struts2.0视频教程+struts2.0中文教程"包含的资源旨在帮助学习者深入理解和掌握Struts2.0的核心概念和实际应用。 首先,"struts2.0入门.rar"可能包含了基础的教程内容,涵盖了以下几个关键知识点: 1. **...

    Struts 2.0

    在开始开发Struts 2应用之前,首先需要从Apache官方网站下载Struts 2的发行包,通常推荐下载all包,因为它包含了所有必要的文档、源码、实例和库文件。解压后,可以参考提供的示例程序进行学习,例如`struts2-blank-...

    Struts 2.0系列(MAX)

    Struts 2.0系列(MAX),pdf格式,全方位介绍struts2: 常用的Struts 2.0的标志(Tag)介绍 Struts 2.0的Action讲解 在Struts 2.0中国际化(i18n)您的应用程序 转换器(Converter)——Struts 2.0中的魔术师 在Struts ...

    JavaEE源代码 Struts2.0

    JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0...

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

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

    Struts2.0的api

    `独木成林_百度搜索.url`可能是一个链接,指向关于Struts2.0的在线资源或社区讨论,这对于开发者解决问题和学习新技巧非常有用。开发者可以通过搜索引擎找到丰富的教程、示例代码和解决方案,提升自己在Struts2.0上...

    struts2.0的特点

    Struts2.0是Java Web开发领域中的一款流行框架,它是Struts1.x与WebWork框架的结合体,继承了两者的优点并进行了创新。在Struts2.0中,核心概念之一是Action,它被设计为一个简单的POJO(Plain Old Java Object),...

    Struts2.0 Jar包

    Struts2.0是一款强大的Java Web框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了灵活且强大的架构来构建企业级的Web应用程序。这个“Struts2.0 Jar包”包含了所有必要的库文件,使得开发者可以便捷...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    手册中可能还会包含实例代码、常见问题解答以及调试技巧等内容,对于提升开发效率和解决问题非常有帮助。因此,对于任何想要在Java Web领域深入发展的程序员来说,这是一份不容错过的宝贵资料。

    struts2.0jar包

    Struts2.0 jar包是Java Web开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Java应用。该框架极大...

    struts 2.0 详细配置

    ### Struts 2.0 详细配置解析 #### 一、Struts 2.0 简介 Struts 2.0 是一个基于 Java 的开源框架,用于开发 Web 应用程序。它继承了 Struts 1.x 的优点,并在架构上进行了改进,更加灵活且易于扩展。Struts 2.0 ...

    struts 2.0

    Struts 2.0是Java Web开发中的一个关键框架,它是Apache软件基金会的顶级项目,融合了原本独立的Struts 1.x和WebWork框架的优势,为开发者提供了一个强大、灵活且可扩展的MVC(Model-View-Controller)架构。...

    struts2.0的数据校验框架struts2.0的数据校验框架

    struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架

    struts2.0入门案例

    Struts2.0是Java Web开发中一个非常重要的框架,它是Apache软件基金会的Jakarta项目下的一个开源产品,主要用于构建MVC(Model-View-Controller)模式的应用程序。本入门案例将带你逐步了解如何使用Struts2.0来创建...

    初识[Struts2.0]并[使用Struts2.0]进行SSH集成

    SSH集成则是指Spring、Struts2.0和Hibernate这三个开源框架的整合,它们分别负责控制层、业务逻辑层和数据访问层,共同构成了强大的企业级应用开发解决方案。 Struts2.0的核心特性包括: 1. **Action与结果**:...

Global site tag (gtag.js) - Google Analytics