基于 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 ...
随机推荐
- 编译的java工程压缩上传到linux服务器上后,中文的类名显示乱码
首先声明,类名是用中文命名的,这个别人写的,不允许修改. 本地用7zip软件压缩成zip包,传到服务器解压,发现中文的class文件名称是乱码. 解决办法: 方法一:使用jar命令打成jar包,传到服 ...
- HashMap源码分析-基于JDK1.8
hashMap数据结构 类注释 HashMap的几个重要的字段 hash和tableSizeFor方法 HashMap的数据结构 由上图可知,HashMap的基本数据结构是数组和单向链表或红黑树. 以 ...
- 51 nod 1046 A^B Mod C
1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^ ...
- spring-boot RestTemplate 连接池
以前我们项目都是基于Apache HttpClient 连接池进行web 接口调用,后来用spring-boot, 发现 RestTemplate 挺好用. 简单介绍下: 什么是RestTemplat ...
- 精心整理的十个必须要知道CSS+DIV技巧
1.css font的简写规则 当我们写字体样式的时候,我们也许会这样子写 font-size: 1em; line-height: 1.5em; font-weight: bold; font-s ...
- 为FreeBSD安装adobe flash插件
参考 FreeBSD官方手册浏览器一章. pkg install nspluginwrapper nspluginwrapper 是一个辅助安装配置 NetScape Plugin的工具. 可以为Ne ...
- Element-UI 表格 列过多内容换行问题
本文地址:http://www.cnblogs.com/veinyin/p/8487098.html 一般表格不会有很多列,所以在使用时会很方便,但是如果有25+个列时,就会发现宽度完全不够用,只有 ...
- Java 对象初始化生命周期
class Man { String name; int age = 20; public static int sex = 1; Man(String name, int age) { //supe ...
- mysql取字段名注意事项!!!!千万不能和关键字同名
今天就碰到一个恶心的问题,更新时update sql语句报错,查了半天感觉没问题啊,后来一行一行定位,终于找到原因了, 原来是有个字段是show,和mysql关键字冲突了,坑爹! 改了个名字就好了,或 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day2
第二天. 同学还是不带本子记笔记.dalao. 第二天:图论,讲师:@ExfJoe 全程划水,前面都讲水算法[虽然我可能已经忘记了]什么最短路,Tarjan,最小生成树,2SAT,差分约束啥的,我现在 ...