struts2的showcase例子中提供了下载文件的例子,这里贴出来看看:
/*
* $Id: FileDownloadAction.java 496318 2007-01-15 13:58:24Z husted $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2.showcase.filedownload;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
/**
* Demonstrates file resource download.
* Set filePath to the local file resource to download,
* relative to the application root ("/images/struts.gif").
*
*/
public class FileDownloadAction implements Action {
private String inputPath;
public void setInputPath(String value) {
inputPath = value;
}
public InputStream getInputStream() throws Exception {
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute() throws Exception {
return SUCCESS;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="filedownload" extends="struts-default" namespace="/filedownload">
<default-action-ref name="download"/>
<action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
<param name="inputPath">/images/struts.gif</param>
<result name="success" type="stream">
<param name="contentType">image/gif</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">filename="struts.gif"</param>
<param name="bufferSize">4096</param>
</result>
</action>
</package>
</struts>
可以注意下struts2 xml配置文件中action的param:contentDisposition,其中filename值就是输出的文件名,如果改成中文就会出现乱码,而且可能下载失败,所以这里就需要对filename进行一个特殊的编码转换。
具体处理如下:
首先修改xml文件的action
<action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
<param name="inputPath">/images/struts.gif</param>
<param name="filename">下载.gif</param>
<result name="success" type="stream">
<param name="contentType">image/gif</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">filename="${filename}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
然后再action中对filename进行一个编码处理:
/*
* $Id: FileDownloadAction.java 496318 2007-01-15 13:58:24Z husted $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2.showcase.filedownload;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
/**
* Demonstrates file resource download.
* Set filePath to the local file resource to download,
* relative to the application root ("/images/struts.gif").
*
*/
public class FileDownloadAction implements Action {
private String inputPath;
public void setInputPath(String value) {
inputPath = value;
}
private String filename;
public void setFilename(String filename) {
this.filename = filename;
}
public String getFilename() {
return filename;
}
public InputStream getInputStream() throws Exception {
filename = new String(filename.getBytes(),"iso8859-1");
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute() throws Exception {
return SUCCESS;
}
}
引用
filename = new String(filename.getBytes(),"iso8859-1");
分享到:
相关推荐
struts中文乱码问题解决详细步骤(两种方法)
关于StrutsPrepareAndExecuteFilter最新的过滤器,在Struts.xml定义常量<constant name="struts.i18n.encoding" value="UTF-8"/>...关于Struts2各个版本、各种过滤器,用get方式提交都方法都无法解决的中文乱码问题。
struts1.2 解决中文乱码(Java技术)
解决Struts2.0中文乱码详细方法。
struts2中存在中文乱码的问题解决方 中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。 大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码...
奇怪的struts2的中文乱码问题及解决.docx
解决Struts2下载中文出现乱码情况,已通过测试,
解决中文乱码的问题
struts2中文乱码的解决DEMO,绝对可以运行。
在web开发的时候,经常会出现中文乱码,你首先看看,你的乱码问题是处在数据库方面呢? 还是代码中,这里的解决是代码中的乱码,里面有两种方法可以解决
解决SSH中的struts2的中文乱码问题,里面暂且介绍了3种,其他的希望有人能提出来,让大家共享...
Struts中文乱码解决方案
在进行web应用程序开发的过程中,中文问题经常困扰着很多程序员。因此,在接下来的两个课程的学习中,我将根据实践经验来谈一下web应用中的中文问题的解决方法。让大家不再为此而头痛。
Struts2资源文件在jsp页面中显示乱码解决
Struts实现文件下载中文乱码解决方案收藏
解决Struts提交中文出现乱码和提交日期型数据报错的问题,有两个文件夹,里面分别有使用说明。
Struts中中文乱码的解决方法 Struts中中文乱码的解决方法 Struts中中文乱码的解决方法
很受网络上庞杂的Struts2上传下载的误导,很多没有解决中文乱码问题,本例实现了Struts2批量上传与下载,中文乱码问题完美解决,供大家参考!
struts 中文乱码问题解决
JSP struts2 url传参中文乱码解决办法.docx