`

下载处理Servlet工具类

    博客分类:
  • java
 
阅读更多

原文:http://javatar.iteye.com/blog/72265

项目中用到下载功能,一般都使用超链接做下载, 
但txt, html, csv等会被浏览器直接打开, 
写了一个工具类处理这个问题。 
很简单,放上来备忘。 

Java代码  收藏代码
  1. package com.xxx.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9. import javax.servlet.ServletConfig;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.HttpServlet;  
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. /** 
  16.  * 下载处理Servlet 
  17.  * @author liangfei0201@163.com 
  18.  * 
  19.  */  
  20. public class DownloadServlet extends HttpServlet {  
  21.   
  22.     private static final long serialVersionUID = 1L;  
  23.       
  24.     private static final String DEFAULT_ENCODING = "UTF-8";  
  25.       
  26.     private static final int DEFAULT_BUFFER_SIZE = 4096;  
  27.       
  28.     private String encoding = DEFAULT_ENCODING;  
  29.       
  30.     private int bufferSize = DEFAULT_BUFFER_SIZE;  
  31.       
  32.     public void init(ServletConfig sc) throws ServletException {  
  33.         super.init(sc);  
  34.   
  35.         String paramEncoding = sc.getInitParameter("encoding");  
  36.         if (paramEncoding != null && paramEncoding.trim().length() > 0) {  
  37.             encoding = paramEncoding.trim();  
  38.         }  
  39.           
  40.         String paramSize = sc.getInitParameter("bufferSize");  
  41.         if (paramSize != null && paramSize.matches("^[0-9]+$")) {  
  42.             bufferSize = Integer.parseInt(paramSize);  
  43.         }  
  44.     }  
  45.   
  46.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  47.             throws ServletException, IOException {  
  48.         doPost(request, response);  
  49.     }  
  50.   
  51.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  52.             throws ServletException, IOException {  
  53.         // 查找文件  
  54.         File file = new File(getServletContext().getRealPath("/") + request.getServletPath());  
  55.         if (! file.exists()) {  
  56.             response.sendError(HttpServletResponse.SC_NOT_FOUND);  
  57.             return ;  
  58.         }  
  59.           
  60.         // 设置response  
  61.         response.setContentType("application/x-msdownload; charset=" + encoding);  
  62.         response.addHeader("content-type""application/x-msdownload;");  
  63.         response.addHeader("content-disposition""attachment; filename="+ response.encodeURL(file.getName()));  
  64.         response.setContentLength((int)file.length());  
  65.           
  66.         // 输出  
  67.         InputStream in = new FileInputStream(file);  
  68.         OutputStream out = response.getOutputStream();  
  69.         try {  
  70.             int length = 0;  
  71.             byte[] buffer = new byte[bufferSize];  
  72.             while ((length = in.read(buffer)) != -1) {  
  73.                 out.write(buffer, 0, length);  
  74.             }  
  75.             out.flush();  
  76.         } finally {  
  77.             if (in != null) {  
  78.                 in.close();  
  79.             }  
  80.         }  
  81.     }  
  82.   
  83. }  



Xml代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>download</servlet-name>  
  3.     <servlet-class>com.xxx.servlet.DownloadServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>GBK</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>bufferSize</param-name>  
  10.         <param-value>8192</param-value>  
  11.         </init-param>  
  12.     <load-on-startup>4</load-on-startup>  
  13. </servlet>  
  14. <servlet-mapping>  
  15.     <servlet-name>download</servlet-name>  
  16.     <url-pattern>/download/*</url-pattern>  
  17. </servlet-mapping>  
  18. <servlet-mapping>  
  19.     <servlet-name>download</servlet-name>  
  20.     <url-pattern>*.csv</url-pattern>  
  21. </servlet-mapping>  
  22. <servlet-mapping>  
  23.     <servlet-name>download</servlet-name>  
  24.     <url-pattern>*.txt</url-pattern>  
  25. </servlet-mapping>  
分享到:
评论

相关推荐

    java servlet上传下载工具类

    总结,"java servlet上传下载工具类"是Java Web开发中一个实用的组件,它封装了复杂的文件操作逻辑,使开发者能更高效、安全地处理文件上传和下载任务。这个工具类基于"孤傲苍狼"的实现,具有较高的稳定性和灵活性,...

    java开发Servlet使用jdbc工具类

    Java开发Servlet时,使用JDBC(Java Database Connectivity)工具类是一种常见的操作,它允许程序员与各种类型的数据库进行交互。在给定的描述中,我们提到的是一个自定义封装的JDBC工具类库,这个库提供了数据库...

    ServletAPI

    总结来说,ServletAPI是Java Web开发的核心,提供了处理HTTP请求的强大工具,结合JSP可以构建出复杂的Web应用程序。通过学习和掌握ServletAPI,开发者可以更好地理解和构建服务器端逻辑,提升Web应用的性能和用户...

    学习了servlet之后,将servlet全部整合在一个工具类中

    在深入探讨这个工具类之前,我们首先需要理解Servlet的基本概念。Servlet是Java编程语言中用于扩展服务器功能的接口,主要用于Web应用程序。它是由Java Servlet API定义的,允许开发者创建动态响应HTTP请求的服务。 ...

    java下载类(servlet)

    在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,它可以处理来自客户端(通常是浏览器)的请求,并向客户端发送响应。在这个特定的场景中,"java下载类(servlet)"指的是一个使用Servlet技术来实现...

    文件上传下载servlet自用

    在IT行业中,文件上传下载是Web应用中常见的功能,尤其在服务器端编程中,Servlet扮演着重要的角色。Servlet是Java编程语言中用于扩展服务器功能的接口,它可以在接收到HTTP请求后进行处理,并向客户端返回响应。在...

    servlet 3.0 jar 包综合下载

    下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...

    java文件上传下载工具类

    以下是对"java文件上传下载工具类"这一主题的详细解释。 首先,让我们了解文件上传。在Web应用中,用户可能需要上传文件,如图片、文档或视频。Java通过Servlet API提供了处理文件上传的功能。Servlet 3.0及以上...

    javax.servlet.jar包下载

    导入`javax.servlet.jar`后,确保你的IDE或构建工具已经更新了类路径,这样编译器和运行时环境才能找到所需的类。 5. **Tomcat和Java EE服务器** `javax.servlet.jar`通常是Java EE兼容服务器(如Tomcat、Jetty、...

    servlet文件下载项目

    NetBeans提供了可视化的工具来创建Servlet类,设置部署描述符(`web.xml`),以及进行调试和测试。 在这个项目中,`readme.txt`可能是项目说明文档,详细描述了项目的使用方法、注意事项以及可能遇到的问题。而`...

    Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类

    总的来说,BeanUtil工具类是Java Web开发中的实用工具,它简化了Servlet处理表单数据和JavaBean之间数据转换的过程,让代码更简洁、更易于维护。在学习和使用BeanUtil时,还需要了解其潜在的类型转换问题和安全性...

    常用Java工具类

    3. **文件上传工具类**:文件上传是Web应用中的常见功能,Java提供了Servlet API来处理文件上传请求。Apache的Commons FileUpload库提供了一套方便的工具类,可以解析多部分请求,将文件保存到服务器。这类工具类...

    servlet api jar

    总的来说,Servlet API JAR是Java Web开发不可或缺的一部分,它提供了处理HTTP请求的核心工具,使得开发者可以专注于业务逻辑,而不是底层网络通信的复杂性。通过理解和熟练运用Servlet API,可以创建高效、可扩展的...

    servlet api 与servlet src

    通常,Servlet API的源码会包含在像servlet.jar这样的库文件中,开发者可以通过反编译工具查看或下载官方提供的源码包。 在Java EE环境中,Servlet API是通过Web容器(如Tomcat、Jetty等)来支持的。开发者编写实现...

    Servlet 中文乱码解决工具类

    在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象。由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - 使用Maven或Gradle等构建工具时,可以在pom.xml或build.gradle文件中添加对应的依赖,这样在构建过程中会自动下载并引入这些库。 5. **Servlet生命周期** - 初始化:当Servlet首次被请求或者在web.xml中配置了`...

    JavaWeb中文件上传最强工具类

    这里我们关注的是一个自定义的Util工具类,它特别针对Excel2007格式进行了优化,同时也兼容其他版本的Excel处理。这个工具类结合了文件上传、JSON解析以及Form表单提交等技术,提供了强大的文件处理能力。 首先,让...

    验证码工具类.zip

    本资源提供了两种实现方式:基于Servlet和Struts2(Action)的验证码工具类。以下是对这两个版本的验证码工具类的详细解释。 ### Servlet版验证码工具类 1. **验证码生成**: Servlet版本的验证码工具类通常会...

    Servlet

    Servlet API提供了许多工具类,如`RequestDispatcher`用于请求转发和重定向,`Cookie`用于管理客户端的持久性数据,`Session`用于跟踪用户会话。 七、Servlet与JSP的配合 Servlet通常用于处理业务逻辑,而JSP则专注...

    servlet-2.5.jar下载

    在没有使用像Maven或Gradle这样的依赖管理工具的情况下,手动下载和管理像`servlet-2.5.jar`这样的库文件是非常常见的做法。 总结来说,"servlet-2.5.jar"是Java Servlet API 2.5版本的实现,它为开发者提供了处理...

Global site tag (gtag.js) - Google Analytics