`
alongjob
  • 浏览: 9414 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多
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);
}

 

 

分享到:
评论

相关推荐

    stuts2文件上传下载详解

    Struts2作为一款强大的MVC框架,为Java开发者提供了便捷的文件上传和下载功能。本文将深入探讨如何在Struts2框架中实现文件的上传与下载,并提供相关的代码示例。 一、Struts2文件上传 1. **依赖库**:在进行文件...

    struts2批量下载

    如果在下载过程中发生错误,比如文件不存在或权限问题,`DownloadAction`应捕获这些异常并返回错误结果,这样用户可以被重定向到错误页面(如`downloadListError.jsp`),显示相应的错误信息。 综上所述,Struts2...

    struts2下载文件

    本文将深入解析如何利用Struts2框架完成文件的下载操作,包括代码示例、关键配置及注意事项。 #### 一、下载文件的JSP页面实现 在前端,下载文件的功能通常通过创建一个包含超链接的JSP页面来实现。如`download....

    3g应用-从指定的服务器上,下载资源如音乐,图片.文本等

    在给出的代码片段中,可以看到通过`Action`接口实现了一个名为`DownloadAction`的类,该类负责执行具体的下载逻辑。 - `DownloadAction`继承了`Action`接口,并重写了`execute()`方法。在`execute()`方法中,实现了...

    struts2实现文件下载实例源代码

    在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨如何在Struts2框架下实现文件下载的实例。 首先,我们需要在项目的Web应用目录结构中...

    struts2文件下载

    在Struts2中,`DownloadAction.java`很可能是一个关键的控制器类,它负责处理用户请求并提供文件下载。这个类通常会包含以下方法: 1. **预处理方法**:在文件下载之前,可能需要进行一些预处理操作,比如验证用户...

    struts2简单下载功能

    用户点击下载链接,Struts2会通过`DownloadAction`处理请求,读取并返回指定文件,浏览器接收到响应后,会自动弹出文件保存对话框供用户选择保存位置。 请注意,这只是一个简化的示例,实际应用中可能需要处理更多...

    用WebClient编写整站下载.pdf

    ### 使用WebClient编写整站下载的关键技术点 #### 一、概述 整站下载是一种能够复制网站所有资源至本地的技术,使得用户可以在无网络的情况下访问这些资源。在本篇文章中,我们将详细介绍如何使用C#中的`WebClient`...

    Struts2单文件下载

    在Struts2中实现文件下载是常见的需求,尤其在处理用户请求获取服务器上的静态或动态资源时。下面我们将深入探讨如何使用Struts2实现单文件下载。 首先,你需要在Struts2配置文件(struts.xml)中定义一个Action,...

    struts2下载功能实现

    在`DownloadAction`类中,我们需要实现下载逻辑。首先,我们可能需要通过依赖注入(DI)获取Service层的对象,以便进行业务操作。在这里,我们有一个`SoftwareServerIfc`接口的实例,可以通过setter方法注入。`...

    struts2.1.3 简单下载文件

    这个版本的Struts2在处理Web应用中的各种任务,如表单处理、数据验证、文件上传下载等方面提供了强大的支持。在本程序中,我们关注的是如何使用Struts2.1.3实现一个简单的文件下载功能。 首先,我们需要在项目中...

    文件下载java版本

    在Java编程环境中,文件下载是常见的需求,尤其是在Web应用程序中。本知识点主要涉及如何使用Java实现文件下载功能,特别是结合多线程技术以及Struts框架的应用。以下将详细阐述相关概念和技术。 首先,Java文件...

    Strus下载实例--------

    对于文件下载,我们需要创建一个专门的Action类,比如`DownloadAction`,并在其中定义处理文件下载的方法。 2. **文件路径管理**:确定要下载的文件在服务器上的准确路径。这通常涉及到配置文件或者在Action类中硬...

    tomcat 实现文件上传下载

    在IT行业中,文件上传与下载是Web应用中的常见功能,特别是在企业级的系统中,例如内容管理系统、在线教育平台等。本示例聚焦于如何利用Struts2框架和Tomcat服务器来实现这一功能。以下是对这个主题的详细阐述: ...

    struts2 下的文件下载

    `DownLoadAction`应该包含一个方法(如`download()`),该方法会在用户请求文件下载时被调用。 2. **HTTP响应**: 文件下载涉及到设置HTTP响应头,尤其是`Content-Type`(定义文件类型)和`Content-Disposition`...

    struts2下载实例

    本实例将带你深入理解Struts2的下载功能,帮助你更好地掌握这一核心技术。 首先,Struts2的核心组件包括Action类、配置文件(struts.xml)、拦截器(Interceptor)以及结果类型(Result)。Action类是业务逻辑的...

    打包批量下载

    在IT行业中,批量下载是一种常见的需求,特别是在文件管理和数据共享的场景下。Struts2作为一款流行的Java Web框架,提供了解决这个问题的能力。本篇将详细介绍如何利用Struts2实现打包批量下载的功能。 首先,我们...

    struts2通用下载文件例程

    对于文件下载,我们需要创建一个专门的Action类,例如`DownloadAction.java`。这个类通常会包含一个返回类型为`StreamingResult`的结果,以支持文件流的输出。 ```java public class DownloadAction extends ...

Global site tag (gtag.js) - Google Analytics