文件下载是一个非经常见的功能,用struts2实现文件下载的步骤:

一)定义一个Action类。FileDownload.java

  1. package com.struts2.filedownload;
  2. import java.io.InputStream;
  3. import org.apache.struts2.ServletActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. //文件下载
  6. public class FileDownload extends ActionSupport{
  7. private int number ;
  8. private String fileName;
  9. public int getNumber() {
  10. return number;
  11. }
  12. public void setNumber(int number) {
  13. this.number = number;
  14. }
  15. public String getFileName() {
  16. return fileName;
  17. }
  18. public void setFileName(String fileName) {
  19. this.fileName = fileName;
  20. }
  21. //返回一个输入流,作为一个client来说是一个输入流,但对于server端是一个 输出流
  22. public InputStream getDownloadFile() throws Exception    {
  23. if(1 == number)   {
  24. this.fileName = "Dream.jpg" ;
  25. //获取资源路径
  26. return ServletActionContext.getServletContext().getResourceAsStream("upload/Dream.jpg") ;
  27. }   else if(2 == number)   {
  28. this.fileName = "jd2chm源代码生成chm格式文档.rar" ;
  29. //解解乱码
  30. this.fileName = new String(this.fileName.getBytes("GBK"),"ISO-8859-1");
  31. return ServletActionContext.getServletContext().getResourceAsStream("upload/jd2chm源代码生成chm格式文档.rar") ;
  32. }
  33. else
  34. return null ;
  35. }
  36. @Override
  37. public String execute() throws Exception {
  38. return SUCCESS;
  39. }
  40. }
  1. package com.struts2.filedownload;
  2.  
  3. import java.io.InputStream;
  4.  
  5. import org.apache.struts2.ServletActionContext;
  6.  
  7. import com.opensymphony.xwork2.ActionSupport;
  8.  
  9. //文件下载
  10. public class FileDownload extends ActionSupport{
  11.  
  12. private int number ;
  13.  
  14. private String fileName;
  15.  
  16. public int getNumber() {
  17. return number;
  18. }
  19.  
  20. public void setNumber(int number) {
  21. this.number = number;
  22. }
  23.  
  24. public String getFileName() {
  25. return fileName;
  26. }
  27.  
  28. public void setFileName(String fileName) {
  29. this.fileName = fileName;
  30. }
  31.  
  32. //返回一个输入流,作为一个client来说是一个输入流。但对于server端是一个 输出流
  33. public InputStream getDownloadFile() throws Exception
  34. {
  35. if(1 == number)
  36. {
  37. this.fileName = "Dream.jpg" ;
  38. //获取资源路径
  39. return ServletActionContext.getServletContext().getResourceAsStream("upload/Dream.jpg") ;
  40. }
  41.  
  42. else if(2 == number)
  43. {
  44. this.fileName = "jd2chm源代码生成chm格式文档.rar" ;
  45. //解解乱码
  46. this.fileName = new String(this.fileName.getBytes("GBK"),"ISO-8859-1");
  47. return ServletActionContext.getServletContext().getResourceAsStream("upload/jd2chm源代码生成chm格式文档.rar") ;
  48. }
  49. else
  50. return null ;
  51. }
  52.  
  53. @Override
  54. public String execute() throws Exception {
  55.  
  56. return SUCCESS;
  57. }
  58.  
  59. }

二)在struts.xml文件里配置相关信息

  1. <struts>
  2. <package name="struts2" extends="struts-default">
  3. <action name="FileDownload" class="com.struts2.filedownload.FileDownload">
  4. <result name="success" type="stream">
  5. <param name="contentType">text/plain</param>
  6. <param name="contentDisposition">attachment;fileName="${fileName}"</param>
  7. <param name="inputName">downloadFile</param>
  8. <param name="bufferSize">1024</param>
  9. </result>
  10. </action>
  11. </package>
  12. </struts>
  1. <struts>
  2. <package name="struts2" extends="struts-default">
  3. <action name="FileDownload" class="com.struts2.filedownload.FileDownload">
  4. <result name="success" type="stream">
  5. <param name="contentType">text/plain</param>
  6. <param name="contentDisposition">attachment;fileName="${fileName}"</param>
  7. <param name="inputName">downloadFile</param>
  8. <param name="bufferSize">1024</param>
  9. </result>
  10. </action>
  11.  
  12. </package>
  13.  
  14. </struts>

1.结果类型必需要写成 type="stream"  ,与之相应的处理类是 org.apache.struts2.dispatcher.StreamResult

2.涉及到的參数:

3.

1)  <param name="contentDisposition">attachment;fileName="${fileName}"</param>

contentDisposition默认是 inline(内联的), 比方说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择

2)  attachment :下载时会打开下载框

3)  fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名称字

4.<param name="inputName">downloadFile</param>,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致

三)用于显示下载的链接界面 filedownload.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <base href="<%=basePath%>">
  10. <title>My JSP 'filedownload.jsp' starting page</title>
  11. <meta http-equiv="pragma" content="no-cache">
  12. <meta http-equiv="cache-control" content="no-cache">
  13. <meta http-equiv="expires" content="0">
  14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  15. <meta http-equiv="description" content="This is my page">
  16. <!--
  17. <link rel="stylesheet" type="text/css" href="styles.css">
  18. -->
  19. </head>
  20. <body>
  21. <h2>文件下载内容:</h2><br/>
  22. Dream.jpg:<a href="FileDownload.action?number=1">点击下载</a><br/>
  23. jd2chm源代码生成chm格式文档.rar:<a href="FileDownload.action?number=2">点击下载2</a>
  24. </body>
  25. </html>

struts2在项目中的应用之下载的更多相关文章

  1. 项目中的那些事---下载pdf文件

    最近做了一个下载pdf文档的需求,本以为使用HTML5中<a>标签的属性download就能简单搞定,不料IE竟然不支持这一简单粗暴的H5新特性,而是直接在网页中打开, 于是各种搜索之后得 ...

  2. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  3. 准备在新项目中使用pgsql【资源收集】

    pgsql大象数据库 是我最近在关注的一款开源数据库,可以自由修改,没那么多限制,准备在新项目中使用 postgresql中国下载站 http://www.postgres.cn/download#s ...

  4. NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中

    由于XSSFWorkbook类型的Write方法限制,Write完成后就自动关闭流数据,所以无法很好的支持的Web模式,网上目前也未找到好的解决方案. 注意:若直接使用在WinForm项目中,必需先下 ...

  5. java中的上传下载----ajaxFileUpload+struts2

    文件上传在项目中应该是非常常见的,而且很多时候,上传文件都只是一个小页面中的一个功能,要求在实现文件上传的前提下不刷新页面.而一般情况下将客户端的文件包装成网络地址传递到服务器端然后通过流来进行文件传 ...

  6. web项目中加入struts2、spring的支持,并整合两者

    Web项目中加入struts2 的支持 在lib下加入strut2的jar包 2. 在web.xml中添加配置 <filter> <filter-name>struts2< ...

  7. Struts2项目中使用Ajax报错

    在Struts2项目中使用Ajax向后台请求数据,当添加了json-lib-2.3-jdk15.jar和struts2-json-plugin-2.3.4.1.jar两个包时,在result中配置ty ...

  8. 在Maven项目中,指定使用阿里云仓库下载jar包

    Maven项目中,在pom.xml的</project>标签之前加入一下标签,指定使用阿里云仓库下载jar包. <!-- 使用aliyun maven --> <repo ...

  9. Struts2基本使用(一)--在项目中引入Struts2

    Struts2基本使用 在MVC开发模式中,Struts2充当控制器(Controller)的角色.其主要功能就是处理用户请求,生成响应,是连接视图层(View)和模型层(Model)的桥梁.在处理用 ...

随机推荐

  1. vi / vim 设置

    一.vi下方向键输入后,出现ABCD,解决方法: 在vi中输入:set nocp 按回车即可. 二.设置TAB缩进4个空格: 为了vim更好的支持python写代码,修改tab默认4个空格有两种设置方 ...

  2. Codeforces Round #306 (Div. 2) A. Two Substrings【字符串/判断所给的字符串中是否包含不重叠的“BA” “AB”两个字符串】

    A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  3. Python与正则表达式[0] -> re 模块的正则表达式匹配

    正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...

  4. linux-网络监控命令-netstat进阶

    2.网络连接状态详解共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的.1).LISTEN:首先服务端需要打开一个socket进行监听,状态为LIST ...

  5. Spring/Spring MVC/Spring Boot实现跨域

    说明:Spring MVC和Spring Boot其实用的都是同一套. CORS介绍请看这里:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Acc ...

  6. HTML <form> 标签的 accept-charset 属性

    定义和用法 accept-charset 属性规定服务器处理表单数据所接受的字符集. accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据. ...

  7. Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)

      linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接 ...

  8. Makefile学习之一

    Makefile注意: 1.Makefile由三部分组成:目标,依赖,命令: 2.命令行前必须有一个tab键作为开头: 3.定义变量:objects=main.o abc.o 使用$(objects) ...

  9. ES6方面重点摘要

    1.变量声明(1)内层变量覆盖外层变量(即后面的覆盖前面的)(2)循环变量的声明,i值在全局范围内有效,所以最后输出的都是最后一轮i的值(3)let.const的引入,为JS增加了块级作用域的概念(c ...

  10. asp.net显示评论的时候为几天前的格式

    自己做的一个小项目实现的功能,做个记录先~ 效果如图: 代码如下: public static class TimerHelper { public static string GetTimeSpan ...