基于 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 ...
随机推荐
- RAC的坑
http://www.cocoachina.com/industry/20140609/8737.html 1.对数组的观察 有了这些Category,大部分的Delegate都可以使用RAC来做.或 ...
- 转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
转载地址:http://emouse.cnblogs.com/ 飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其 ...
- 开启session
在index.php中开启 session_start();
- HDU 1718 Rank 排序
解题报告:给一个班的学生的分数排序,然后判断Jack在他们班级的排名是多少,并且有如下规定,若多个人的分数相同,则他们的排名也 是相同的.说白了就是问这个班上分数比Jack高的人数有多少个,如果有n个 ...
- 【leetcode 简单】 第七十七题 单词模式
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向 ...
- url参数用&拼接并且按照字母顺序排序方法
private string urlParamManager(JObject postArray, bool flag) { ArrayList keys = new ArrayList(); for ...
- 假·最大子段和 (sdutoj 4359 首尾相连)(思维)
题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2736/pid/4359 具体思 ...
- Java编程思想 4th 第1章 对象导论
所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...
- jq 监听input值的变化
$(".popWeiXing .name").bind("input propertychange", function() { modValue.diyDat ...
- docker stack 部署 redis
=============================================== 2019/4/16_第2次修改 ccb_warlock 更新 ...