基于 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 ...
随机推荐
- 关于Linux用户名
1.创建/删除/修改用户名 useradd 选项 用户名其中各选项含义如下: 代码:-c comment 指定一段注释性描述.-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建 ...
- Hi3518 网络监控SOC芯片规格参数
Hi3518 网络监控SOC芯片 视频编解码 处理器内核 ● ARM926@ 440MHz,16KB I-Cache ,16KB D-Cache 视频编码 ● H.264 Main Pro ...
- HDU 3032 multi-sg 打表找规律
普通NIM规则加上一条可以分解为两堆,标准的Multi-SG游戏 一般Multi-SG就是根据拓扑图计算SG函数,这题打表后还能发现规律 sg(1)=1 sg(2)=2 sg(3)=mex{0,1,2 ...
- Packet Tracer 5.0实验(一) 交换机的Telnet远程登录设置
一.实验目标 掌握采用telnet方式配置交换机的方法 二.技术原理 配置交换机的管理IP地址(计算机的IP地址与交换机管理IP地址在同一网段): 为telnet用户配置用户名和登录口令: enabl ...
- Composer学习之————Ubuntu14.04下安装Composer
下载Composer: curl -sS https://getcomposer.org/installer | php 安装Composer: /usr/bin/php composer.phar ...
- Linux装机利器Cobbler安装配置
Linux装机利器Cobbler安装配置 2011-05-27 15:31:05 分类: LINUX 一.安装环境 centos 5.4 关掉iptables 关掉 selinux selinux ...
- Hive笔记之导出查询结果
一.导出到本地 导出查询结果到本地: INSERT OVERWRITE LOCAL DIRECTORY "/tmp/hive-result/t_visit_video" SELEC ...
- Ubuntu自定义终端窗口位置
方法一: 自定义终端启动快捷键 具体方法是自定义一个快速启动终端的快捷键,附带设置终端启动时的位置参数.首先获得需要放置窗口的目标位置信息,可以通过终端命令“ xwininfo ”来获得.步骤是首先打 ...
- SolrJ案例实现搭建环境——(十五)
案例
- linux下C获取系统时间的方法
asctime(将时间和日期以字符串格式表示) 相关函数 time,ctime,gmtime,localtime 表头文件 #include 定义函数 char * asctime(const ...