- 浏览: 279324 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u012934942:
博主我能转载您此篇文章吗?我会署上您的博客地址
quartz的触发器CronTriggerBean 配置 -
wentong0118:
多谢楼主
dom4j创建、解析XML jar包提供下载 -
wangyonglin1123:
非常不错
quartz的触发器CronTriggerBean 配置 -
956699:
请问连接局域网中电脑密码带有@字符怎么办?
基于SMB/JCIFS协议的共享文件上传和下载 -
guoranaccp:
帅
dom4j创建、解析XML jar包提供下载
上个星期,要做一个利用struts1.x作文件下载功能的网页,要求点击链接后,开始弹出下载对话框,下载成功后,转向成功信息页面,失败后,转向error信息页面。
于是找啊找,单纯的文件下载功能还是挺容易的,既可以自己写,也可以用类似smartupload这类现成的包。 至于为什么不用直接的链接,是为了防止服务器文件结构泄漏,有心人其他文件也可以随意下载,那岂不是麻烦?
如果要自己写得话,action的写法大致有三 1, 用输入流,输出流 2, 用dispatcher 3, 用downloadAction
方法3是struts推荐的官方写http://wiki.apache.org/struts/StrutsFileDownload 写的时候,只要继承downloadAction类,然后重写getStreamInfo方法就可以了。但是看一下这个类的src http://www.docjar.org/html/api/org/apache/struts/actions/DownloadAction.java.html 就明白,这个类的getStreamInfo会把结果传给execute方法,而execute方法的最后却被注明
Java代码
// Tell Struts that we are done with the response.
return null;
意味着根本不可能做任何转向。至于试着再重写一下execute方法,好像没有人这么办,在google.com上以关键字downloadAction redirect 或者downloadAction foward,也没有任何可以有用的结果,所以首先放弃了这个方法。不过这个方法还是最简单最可靠的,仿照它给的例子,几行代码就完事,真好。
方法2 以前单独在jsp中,这种方法可能挺流行的,不过在action中一样行不通。 例如代码
Java代码
<pre name="code" class="java">
解释1 为什么成功后return null 因为前面response 已经提交过,没办法再forward,否则报错
解释2 为什么FileNotFoundException转到error画面,因为对话框中,用户如果点取消按钮,tomcat会报ClientAbortException
假如连这个exception都抓掉,然后进行forward,一样会报response已经提交过的错误,根本无法转向。所以干脆就留
着它好了。
方法1 其实根方法3一样,输入流,输出流,有兴趣地可以用IOUtils.copy(in, response.getOutputStream());
没兴趣的可以参照以下代码,我也是参考论坛上一位兄弟的
Java代码
Java代码
解释1 为什么要response.reset(); 假如这个方法是写在一个图片的链接上,如果不reset,就没办法多次下载,
不过对我来说现在没什么影响
解释2 对话框那块为什么只显示文件名 开始的时候我把整个路径都写进去了,结果倒也能下载,可使整个文件的路径都暴露了,跟直接用链接没什么区别了,所以一定要只写文件名
以上3个方法都不能实现成功后转向成功页面的问题,在javaeye和csdn上询问也没有什么结果,不过我的确是见过类似的网页,不知道他们是怎么完成的?始终疑问阿。
没有办法,只好考虑作个假的成功画面,用DispatchAction
一个action1 ,实现转向成功页面功能 , 一个action 2 ,实现下载功能
工作流程为 点击链接, 甭管文件存在不存在,直接进入成功画面,在成功画面打开的同时,执行action2
Java代码
如果文件找不到,则成功画面会转向到失败画面,否则会留在成功画面并弹出对话框
于是找啊找,单纯的文件下载功能还是挺容易的,既可以自己写,也可以用类似smartupload这类现成的包。 至于为什么不用直接的链接,是为了防止服务器文件结构泄漏,有心人其他文件也可以随意下载,那岂不是麻烦?
如果要自己写得话,action的写法大致有三 1, 用输入流,输出流 2, 用dispatcher 3, 用downloadAction
方法3是struts推荐的官方写http://wiki.apache.org/struts/StrutsFileDownload 写的时候,只要继承downloadAction类,然后重写getStreamInfo方法就可以了。但是看一下这个类的src http://www.docjar.org/html/api/org/apache/struts/actions/DownloadAction.java.html 就明白,这个类的getStreamInfo会把结果传给execute方法,而execute方法的最后却被注明
Java代码
// Tell Struts that we are done with the response.
return null;
意味着根本不可能做任何转向。至于试着再重写一下execute方法,好像没有人这么办,在google.com上以关键字downloadAction redirect 或者downloadAction foward,也没有任何可以有用的结果,所以首先放弃了这个方法。不过这个方法还是最简单最可靠的,仿照它给的例子,几行代码就完事,真好。
方法2 以前单独在jsp中,这种方法可能挺流行的,不过在action中一样行不通。 例如代码
Java代码
<pre name="code" class="java">
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { FileDownLoadForm fdform =(FileDownLoadForm)form; String path = fdform.getFilePath(); response.setContentType("application/x-download"); String filenamedownload = path; String filenamedisplay = path.substring(path.lastIndexOf("/")+1); try { filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); RequestDispatcher dispatcher = request.getRequestDispatcher(filenamedownload); if(dispatcher != null) { dispatcher.forward(request,response); } response.flushBuffer(); return null ; // return mapping.findForward("success"); }catch(FileNotFoundException e){ e.printStackTrace(); return mapping.findForward("error"); }catch(Exception e){ e.printStackTrace(); return null; } }</pre>
解释1 为什么成功后return null 因为前面response 已经提交过,没办法再forward,否则报错
解释2 为什么FileNotFoundException转到error画面,因为对话框中,用户如果点取消按钮,tomcat会报ClientAbortException
假如连这个exception都抓掉,然后进行forward,一样会报response已经提交过的错误,根本无法转向。所以干脆就留
着它好了。
方法1 其实根方法3一样,输入流,输出流,有兴趣地可以用IOUtils.copy(in, response.getOutputStream());
没兴趣的可以参照以下代码,我也是参考论坛上一位兄弟的
Java代码
Java代码
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { FileDownLoadForm fdform =(FileDownLoadForm)form; String path = fdform.getFilePath(); BufferedInputStream bis = null; BufferedOutputStream bos = null; InputStream fis = null; OutputStream fos = null; try{ File uploadFile = new File(path); fis = new FileInputStream(uploadFile); bis = new BufferedInputStream(fis); fos = response.getOutputStream(); bos = new BufferedOutputStream(fos); response.reset(); response.setHeader("Content-disposition", "attachment;filename =" + URLEncoder.encode(path.substring(path.lastIndexOf("/")+1), "utf-8")); int bytesRead = 0; byte[] buffer = new byte[4096]; while((bytesRead = bis.read(buffer,0,4096)) != -1){ bos.write(buffer, 0, bytesRead); } bos.flush(); fis.close(); bis.close(); fos.close(); bos.close(); //return mapping.findForward("success"); return null; }catch(FileNotFoundException e){ e.printStackTrace(); return mapping.findForward("error"); }catch(Exception e){ e.printStackTrace(); return null; } }
解释1 为什么要response.reset(); 假如这个方法是写在一个图片的链接上,如果不reset,就没办法多次下载,
不过对我来说现在没什么影响
解释2 对话框那块为什么只显示文件名 开始的时候我把整个路径都写进去了,结果倒也能下载,可使整个文件的路径都暴露了,跟直接用链接没什么区别了,所以一定要只写文件名
以上3个方法都不能实现成功后转向成功页面的问题,在javaeye和csdn上询问也没有什么结果,不过我的确是见过类似的网页,不知道他们是怎么完成的?始终疑问阿。
没有办法,只好考虑作个假的成功画面,用DispatchAction
一个action1 ,实现转向成功页面功能 , 一个action 2 ,实现下载功能
工作流程为 点击链接, 甭管文件存在不存在,直接进入成功画面,在成功画面打开的同时,执行action2
Java代码
<script type="text/javascript"> function download() { window.location ="download.do?method=action2&filePath="+"<bean:write name="filePath" />"; } </script> </head> <body onload=download()>
如果文件找不到,则成功画面会转向到失败画面,否则会留在成功画面并弹出对话框
发表评论
-
HttpClient传送数据乱码解决
2012-06-05 11:17 1263PostMethod method = new PostMet ... -
静态块
2012-05-17 17:48 987public static final Map<Stri ... -
获取字符串CST 时间格式并转换成普通的时间格式
2012-05-14 16:11 2452//CST格式的字符串 String s = " ... -
获取select值(转)
2012-05-08 16:06 1059转自:http://hi.baidu.com/wenliang ... -
JAVA中Map集合遍历的方法
2012-05-07 17:00 11851.声明一个map: Map map = new HashMa ... -
不同的单例模式
2012-03-16 14:57 1203一个简简单单的singleton ... -
quartz的触发器CronTriggerBean 配置
2012-03-13 17:21 33546一个Quartz的CronTrigger表 ... -
Excel转换成Xml
2012-02-29 16:45 5992JAR包: JDK1.6和jxl.jar 需求: EXCEL ... -
ant压缩,解压
2012-02-06 10:21 2148import java.io.File; impor ... -
sun.net.ftp.FtpClient的函数说明
2012-02-03 12:01 1413sun.net.ftp.FtpClient.,该类库主要提供了 ... -
sun.net.ftp.FtpClient 上传、下载简单实例
2012-02-03 11:49 3177sun.net.ftp.FtpClient 可以帮助我们进行一 ... -
Struts2拦截器控制session失效
2011-12-22 15:18 5107com.opensymphony.xwork2.inter ... -
用POI API操作Excel表格
2011-12-19 12:00 85301.首先要下载Jakarta POI, ... -
SWT读写文件,生成新文件
2011-12-19 11:30 1772通过FileDialog读写文件 FileDialog fd ... -
利用java操作Excel文件
2011-12-12 16:33 1095利用java操作Excel,有个开源的东东-jxl.jar,可 ... -
解压zip文件
2011-11-04 09:53 631public class UnzipFile { ... -
Hibernate时间段查询写法
2011-11-04 09:38 1329Hibernate 映射文件.hbm.xml中属性配置type ... -
IBATIS模糊查询语句的写法
2011-09-01 15:23 1360IBATIS的sql语句模糊查询的写法: 1,可以直接对li ... -
dom4j创建、解析XML jar包提供下载
2011-08-19 14:39 12872dom4j创建XML: //用dom4j生成xml文件 ... -
struts2上传下载+前端剪切图片
2011-08-13 12:37 2314昨天头让写个这么个东西,自己之前也见过淘宝上看商品的那个,还有 ...
相关推荐
Struts1是一个经典的开源MVC框架,由Apache软件基金会维护,它在Java Web开发领域有着广泛的应用。这个项目的研究将帮助我们深入理解Web应用程序的架构设计,以及如何通过框架简化开发流程。 首先,Struts1的核心是...
### Struts1 下图片上传与下载技术解析 #### 一、引言 在Web开发中,文件上传与下载是一项常见的需求。Struts1框架作为Java Web应用开发中的一个重要工具,提供了丰富的功能支持来实现文件上传下载。本文将详细介绍...
在"struts2资源下载"中,我们可以获取到与Struts2相关的各种资料,包括但不限于教程、示例代码、API文档、安全补丁以及社区提供的插件等,这些都对学习和使用Struts2框架极其有益。 Struts2的核心功能包括: 1. **...
1. 下载并安装 Struts1 框架。 2. 创建一个新的 Web 项目,并添加 Struts1 的 jar 文件。 3. 配置 struts-config.xml 文件,定义 ActionMapping 和其他配置信息。 4. 创建 Action 类,实现业务逻辑。 5. 创建 JSP ...
### Struts 1.x 总结 #### 一、Struts 框架概述 Struts 是一个基于 Java 的开源框架,它实现了 Model-View-Controller (MVC) 设计模式,帮助开发者构建可扩展、易于维护的 Web 应用程序。在 Struts 1.x 版本中,其...
在开始开发Struts 2应用之前,首先需要从Apache官方网站下载Struts 2的发行包,通常推荐下载all包,因为它包含了所有必要的文档、源码、实例和库文件。解压后,可以参考提供的示例程序进行学习,例如`struts2-blank-...
1. **Action和Result**: Struts2中的Action是业务逻辑的载体,它负责接收请求并处理,然后通过Result来决定如何展示结果。Result可以是JSP、FreeMarker模板或者其他视图技术。 2. **拦截器(Interceptors)**: 拦截器...
struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter struts5 增加集合类型,使用范型 ...
### Struts2下载文件中文乱码处理 在Web开发中,使用Struts2框架进行文件下载操作时,经常遇到的一个问题是文件名中的中文字符显示为乱码。这主要是因为浏览器和服务器之间的编码不一致所导致的。为了确保用户能够...
1. **struts2-core.jar**:这是Struts2的核心库,包含了框架的主要组件,如Action、Result、Interceptor等。它定义了请求处理的流程,提供了ActionContext、ValueStack等关键对象。 2. **xwork-core.jar**:XWork是...
1. 创建一个类实现Converter接口,重写`convert`方法。在这个方法里,你可以编写自己的转换逻辑。 2. 在配置文件中注册这个转换器。在struts.xml文件中,使用`<conversion>`标签声明转换器,指定对应的转换类型。 ...
本项目"基于Struts1.2的上传下载Demo"是针对该框架的一个实践示例,旨在帮助开发者理解和解决在Struts1.2环境中进行文件上传与下载的问题。 首先,让我们深入了解一下Struts1.2中的文件上传功能。在Struts1.2中,...
在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨如何在Struts2框架下实现文件下载的实例。 首先,我们需要在项目的Web应用目录结构中...
在"struts2上传下载项目"中,我们可以深入理解如何利用Struts2实现文件的上传与下载功能。 首先,上传功能在Web应用中十分常见,比如用户在注册时上传头像,或者提交文档等。在Struts2中,我们主要借助`struts2-...
1. **StrutsPrepareAndExecuteFilter**:作为Servlet Filter,负责初始化Struts2环境并处理请求。 2. **ActionMapping**:映射HTTP请求到特定的Action。 3. **StrutsResult**和**Result**接口:定义了Action执行后的...
1. **MVC架构**: MVC模式是软件设计中的一个经典模式,它将应用逻辑分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。在Struts2中,模型负责业务逻辑,视图负责展示数据,而控制器接收用户...
- **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,支持拦截器、类型转换、文件上传等特性。Struts2使用过滤...
1. **超链接下载** 超链接下载是最直观且简单的下载方式,适用于小文件或非敏感文件。在Struts2中,可以通过创建一个Action,将文件路径作为Action的返回结果,然后在JSP页面上创建一个链接指向这个Action。用户点击...
Struts1.x是一个经典的Java Web框架,它在20世纪末至21世纪初被广泛使用,用于构建基于MVC(Model-View-Controller)架构的Web应用。本示例将探讨如何使用Struts1.x实现一个简单的登录功能。首先,我们需要理解...