struts中downloadAction下载详解,包括统计下载次数,刷新页面上下载次数
这是Action代码
package action;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction.ResourceStreamInfo;
import org.apache.struts.actions.DownloadAction.StreamInfo;
import com.huatf.agitar.service.HelpproductService;
/**
* 文档下载类
* @author pxAgitar
*
*/
public class DownAction
{
//services 类
private HelpproductService helpproductService = new HelpproductService();
//地址
private String path;
//文件路径
private String filename;
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
String paths = path+filename;
response.setHeader("content-disposition", "attachment; filename="+ filename);
ResourceStreamInfo rsi = new ResourceStreamInfo("application/file",request.getSession().getServletContext(),paths);
return rsi;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
path = request.getParameter("path");
filename = request.getParameter("file");
StreamInfo info = getStreamInfo(mapping, form, request, response);
String contentType = info.getContentType();
InputStream stream = info.getInputStream();
ServletOutputStream fs = response.getOutputStream();
try
{
response.setContentType(contentType);
copy(stream, fs);
}catch(Exception e)
{
//用户点击取消下载后,还回为空,不记录下载次数
return null;
}
finally
{
if (stream != null)
{
stream.close();
}
}
//向后台添加下载次数
helpproductService.addCount(filename);
//必须还回空,不然会报错:java.lang.IllegalStateException: Cannot forward after response has been committed
return null;
}
public int copy(InputStream input, OutputStream output)
throws IOException
{
byte[] buffer = new byte[getBufferSize()];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer)))
{
output.write(buffer, 0, n);
count += n;
}
if(count !=0)
{
output.flush();
input.close();
}
//这里还回的是文件大小
return count;
}
protected int getBufferSize()
{
return 4096;
}
}
配置文件:
<action path="/download" scope="request" type="action.DownAction"/>
JSP代码:
<a href="download.do?path=${helppro.docurl }&file=${helppro.docname }" onclick="show();" >点击下载</a>
onclick=show();
页面刷新下载次数
function show()
{
setTimeout("location.href='当前页面url'",5000);
}
分享到:
相关推荐
Struts2作为一款强大的MVC框架,为Java开发者提供了便捷的文件上传和下载功能。本文将深入探讨如何在Struts2框架中实现文件的上传与下载,并提供相关的代码示例。 一、Struts2文件上传 1. **依赖库**:在进行文件...
- **流下载Action**:`org.apache.struts.actions.DownloadAction`,用于处理文件下载请求。 **4.2 ActionForm 分类** - **默认ActionForm**:继承自`org.apache.struts.action.ActionForm`。 - **动态ActionForm*...
如果在下载过程中发生错误,比如文件不存在或权限问题,`DownloadAction`应捕获这些异常并返回错误结果,这样用户可以被重定向到错误页面(如`downloadListError.jsp`),显示相应的错误信息。 综上所述,Struts2...
本文将深入解析如何利用Struts2框架完成文件的下载操作,包括代码示例、关键配置及注意事项。 #### 一、下载文件的JSP页面实现 在前端,下载文件的功能通常通过创建一个包含超链接的JSP页面来实现。如`download....
在给出的代码片段中,可以看到通过`Action`接口实现了一个名为`DownloadAction`的类,该类负责执行具体的下载逻辑。 - `DownloadAction`继承了`Action`接口,并重写了`execute()`方法。在`execute()`方法中,实现了...
在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨如何在Struts2框架下实现文件下载的实例。 首先,我们需要在项目的Web应用目录结构中...
在Struts2中,`DownloadAction.java`很可能是一个关键的控制器类,它负责处理用户请求并提供文件下载。这个类通常会包含以下方法: 1. **预处理方法**:在文件下载之前,可能需要进行一些预处理操作,比如验证用户...
用户点击下载链接,Struts2会通过`DownloadAction`处理请求,读取并返回指定文件,浏览器接收到响应后,会自动弹出文件保存对话框供用户选择保存位置。 请注意,这只是一个简化的示例,实际应用中可能需要处理更多...
### 使用WebClient编写整站下载的关键技术点 #### 一、概述 整站下载是一种能够复制网站所有资源至本地的技术,使得用户可以在无网络的情况下访问这些资源。在本篇文章中,我们将详细介绍如何使用C#中的`WebClient`...
在Struts2中实现文件下载是常见的需求,尤其在处理用户请求获取服务器上的静态或动态资源时。下面我们将深入探讨如何使用Struts2实现单文件下载。 首先,你需要在Struts2配置文件(struts.xml)中定义一个Action,...
在`DownloadAction`类中,我们需要实现下载逻辑。首先,我们可能需要通过依赖注入(DI)获取Service层的对象,以便进行业务操作。在这里,我们有一个`SoftwareServerIfc`接口的实例,可以通过setter方法注入。`...
这个版本的Struts2在处理Web应用中的各种任务,如表单处理、数据验证、文件上传下载等方面提供了强大的支持。在本程序中,我们关注的是如何使用Struts2.1.3实现一个简单的文件下载功能。 首先,我们需要在项目中...
在Java编程环境中,文件下载是常见的需求,尤其是在Web应用程序中。本知识点主要涉及如何使用Java实现文件下载功能,特别是结合多线程技术以及Struts框架的应用。以下将详细阐述相关概念和技术。 首先,Java文件...
对于文件下载,我们需要创建一个专门的Action类,比如`DownloadAction`,并在其中定义处理文件下载的方法。 2. **文件路径管理**:确定要下载的文件在服务器上的准确路径。这通常涉及到配置文件或者在Action类中硬...
在IT行业中,文件上传与下载是Web应用中的常见功能,特别是在企业级的系统中,例如内容管理系统、在线教育平台等。本示例聚焦于如何利用Struts2框架和Tomcat服务器来实现这一功能。以下是对这个主题的详细阐述: ...
`DownLoadAction`应该包含一个方法(如`download()`),该方法会在用户请求文件下载时被调用。 2. **HTTP响应**: 文件下载涉及到设置HTTP响应头,尤其是`Content-Type`(定义文件类型)和`Content-Disposition`...
本实例将带你深入理解Struts2的下载功能,帮助你更好地掌握这一核心技术。 首先,Struts2的核心组件包括Action类、配置文件(struts.xml)、拦截器(Interceptor)以及结果类型(Result)。Action类是业务逻辑的...
在IT行业中,批量下载是一种常见的需求,特别是在文件管理和数据共享的场景下。Struts2作为一款流行的Java Web框架,提供了解决这个问题的能力。本篇将详细介绍如何利用Struts2实现打包批量下载的功能。 首先,我们...
对于文件下载,我们需要创建一个专门的Action类,例如`DownloadAction.java`。这个类通常会包含一个返回类型为`StreamingResult`的结果,以支持文件流的输出。 ```java public class DownloadAction extends ...