基于 Struts2 的文件下载
介于上篇我们讲述了基于 Struts2 的单文件和多文件上传,这篇我们来聊一聊基于 Struts2 的文件下载。
1、导 jar 包
commons-io-2.0.1.jar
struts2-core-2.3.15.3.jar
xwork-core-2.3.15.3.jar
struts2-sunspoter-stream-1.2.jar
2、web.xml 配置 Struts2 核心过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、JSP 文件下载页(注意:链接中 filename 后跟的文件名需与 Action 文件下载路径中已知的文件名一致)
<a href="${pageContext.request.contextPath}/download?filename=一个程序员的自我修养.pdf">点击下载 一个程序员的自我修养</a>
4、实现文件下载上传的 DownloadAction
package com.fhcq.action; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport { //提供一个InputStream类型的输入流
private InputStream inputStream; //注意:在给InputSteam指定名称时,不能使用in
//创建一个文件名的属性
private String filename; public String download() throws FileNotFoundException{ //1.找到文件的存储路径
ServletContext servletContext = ServletActionContext.getServletContext();
String realPath = servletContext.getRealPath("/WEB-INF/file");
//2.根据文件路径和文件名new一个新文件
File file = new File(realPath,filename); //3.把文件读到一个InputStream中
inputStream = new FileInputStream(file);
//4.返回一个SUCCESS
return SUCCESS;
//5.由一个叫做stream的结果类型为我们把剩下的事情做完。
} public InputStream getInputStream() {
return inputStream;
} public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
} public String getFilename() { //解决中文文件名在下载过程出现乱码问题,struts.xml中也需添加charset=iso-8859-1
try {
filename=new String(filename.getBytes(),"iso-8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} }
5、配置 struts.xml
<struts>
<!--constant修改struts2的默认配置值 -->
<!--修改struct2称为开发模式,修改配置之后会自动加载 -->
<constant name="devMode" value="true"></constant> <package name="package1" extends="struts-default">
<result-types>
<result-type name="streamx" class="cc.fozone.struts2.StreamResultX"/>
</result-types>
<action name="download" class="com.fhcq.action.DownloadAction" method="download">
<result name="success" type="streamx">
<!--给stream的结果类型注入参数:Content-Type 设置消息头,告知浏览器,响应正文的MIME类型-->
<!--若指定下载文件类型 如ppt\zip格式 application/vnd.ms-powerponit,application/zip-->
<param name="contentType">application/octet-stream;charset=iso-8859-1</param>
<!--contentDisposition:设置响应消息头,告知浏览器以下载的方式打开-->
<!--使用EL表达式,来动态获取文件名-->
<param name="contentDisposition">attachment;filename=${filename}</param>
<!--inputName属性:配置输入流。其实就是把动作类中的输入流的字段名写进来-->
<param name="inputName">inputStream</param>
</result>
</action>
</package>
</struts>
基于 Struts2 的文件下载的更多相关文章
- 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验
一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...
- 关于Struts2的文件下载
首先先来说下关于文件下载的原理: 服务端为客户端提供了一个下载服务,所以服务端需要一个输出流(把客户请求下载的文件输出),相对于服务端来说,客户端需要下载接收一个文件,所以它需要一个输入流(接收文件) ...
- 基于 Struts2 的单文件和多文件上传
文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利.Struts2 已经有默认的 upload 拦截器.我们只需要写参数,它就会自 ...
- 基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序
基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序 不知道为什么,保存的时候显示有一个连接为违禁内容,可能是…………. ...
- 基于Struts2开发快递收发系统 毕业设计 源码
基于Struts2开发快递收发系统 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat6+MySql数据库 运行效果图: 此源码经过详细测试 保证 ...
- Struts2笔记--文件下载
Struts2提供了stream结果类型,该结果类型是专门用于支持文件下载功能的.配置stream类型的结果需要指定以下4个属性. contentType:指定被下载文件的文件类型 inputName ...
- 基于struts2的学生报道管理系统(附github源码地址)
本项目参考了<java web轻量级开发全体验>,加入了对mysql的支持. 一.基本业务功能 通过struts2框架,结合mysql数据库构建一个学生报到管理系统,来模拟学生报到登记的过 ...
- 基于struts2的记住账号密码的登录设计
一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...
- 基于Struts2框架的文件下载 --- Struts2
一.Struts2指定类型文件的下载 1.最终功能实现的截图:(点击文件下载链接,下载文件 ) 2.核心代码 index.jsp: <%@ page language="java&qu ...
随机推荐
- poj 1284 Primitive Roots (原根)
Primitive Roots http://poj.org/problem?id=1284 Time Limit: 1000MS Memory Limit: 10000K Descr ...
- SQL语句(十六)实现集合运算、对数据修改、数据表复制
(一).集合运算(交.并.补) --(1)Union 并运算 select Sname from Student UNION select Tname From Teacher --(2)INTERS ...
- 视差插件parallarx
github上的demo,自己拿来改了改. <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- lxml视频讲座
lxml视频讲座 Winfortune 01 - How to create an equivalent of fortune and cowsay for Windows, using Python ...
- LintCode 383: Max Area
LintCode 383: Max Area 题目描述 给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai).画 n 条垂直线,使得 i 垂直线的两个端点 ...
- Java容器List接口
List接口是Java中经常用到的接口,如果对具体的List实现类的特性不了解的话,可能会导致程序性能的下降,下面从原理上简单的介绍List的具体实现: 可以看到,List继承了Collection接 ...
- 2016.6.20——Plus One
Plus One 本题收获 1.vector<int> 和vector<char>的区别,及与int转换 从vector<int> nums 转换为int res型 ...
- Dream------Hadoop--HDFS的设计
HDFS是为以流式数据访问模式存储超大文件而设计的文件系统. 流式数据访问 HDFS建立在这样一个思想上:一次写入.多次读取模式是最高效的.一个数据集通常由数据源生成或复制, 接着在此基础上进行各 ...
- 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...
- Python类相关的装饰器
一.装饰器装饰类方法 from functools import wraps def wrapper(func): @wraps(func) def inner(self,*args,**kwargs ...