`

下载处理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>  
分享到:
评论

相关推荐

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

    一个工具类将servlet所有的东西全部整合进了,包括过滤器(处理乱码问题),反射技术,c3p0技术,类型转换 jdbc的封装,这个例子绝对是放血的下载,

    Servlet 中文乱码解决工具类

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

    servlet temple

    可从sun公司的Web站点下载 Java Servlet 开发工具。 下面主要介绍javax.servlet.http提供的HTTP Servlet应用编程接口。  HTTP Servlet 使用一个 HTML 表格来发送和接收数据。要创建一个 HTTP Servlet,请扩展 ...

    java-servlet-api.doc

    Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。 Servlet的初始化 Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化...

    java课程设计基于原生servlet和jdbc的学生信息管理系统.zip

    验证码工具类可以返回验证码图片和验证码内容,数据库连接工具类可以返回一个数据库连接和关闭数据库连接的方法,还有一个工具类借助gson将request的数据转换为json串; Dao层都是单表的CURD,没有复杂的业务所以也...

    jsp servlet 入门学习资料-新手一看就懂

    9.2 标签处理类的开发 9.2.1 接口和基类 9.2.2 开发 9.3 标签库文件 9.3.1 taglib 9.3.2 tag 9.4 定位一个tld文件 9.4.1 在Web.xml中定位一个tld文件 9.4.2 直接在JSP文件中定位tld文件 9.5 扩展标签实例 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    Jsp文件上传下载(工具类源码)

    import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    jsp+servlet如何手动处理sql连表查询后包含一对多关系的结果集

    封装从 普通对象的结果集 到 包含集合属性对象的结果集 的转换工具类 例如不使用框架的情况下,连表查询teacher与course的属性,外键teac_id,Teacher类中包含List属性 如何人工处理结果集合,可以建一个扩展类用来...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    基于JSP+SERVLET+MYSQL的在线考试系统源码,有试题管理,考试,阅卷,改卷功能.zip

    Java类的设计:父类Person,子类Teacher,Student,Manager,课程Course,试卷Paper,操作数据库的工具类,处理请求的Servlet类 前端页面的设计: 系统共用的top.jsp和tail.jsp,html标签布局 管理员模块:添加、删除和...

    JavaEE+JDBC+Servlet+EL表达式的员工信息管理系统源码+数据库+项目说明(高分课设).zip

    使用PageUtils分页工具类 **2021/10/8 更新** 1. dao层和service层部分采用单例模式(懒汉式-不支持多线程) 2. service层部门采用工厂模式 ## 源码 [v1.0 - servlet-v1.0]...

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    控制转发层采用Servlet,数据访问层采用Hibernate(bean和dao是由Hibernate逆向工程自动生成)。 系统采用分层架构,由上到下分为视图层、控制转发层、业务层、服务层、数据库访问层。运用了一些基本设计模式,系统...

    dy.jar

    自己写的Web开发工具包。具体包含下面4个部分: &lt;br&gt; 1. 一个简单的servlet+javabean+view的框架,并支持了Freemarker模板;... 对jakarta commons-fileupload封装便于上传下载的工具类。 &lt;br&gt;

    webdemo:基于jsp+servlet+javabean+mysql实现的具备简单注册和登录功能的网站

    注释:dao类主要负责完成与数据库相关的逻辑处理的方法,等待被控制器创建实体并调用需要的方法,其中实现与数据库连接并不是由它完成,dao类仅import该类实现数据库连接。 该小项目需要用到的工具: Idea(java...

    Java常用工具包Jodd.zip

    props 更强大的Java Properties替代jodd-email 更简单易用的e-mail收发jodd-upload 处理HTTP上传jodd-servlets 一些Servlet相关的工具类, 附带一套漂亮的JSP标签库jodd-http  轻巧的HTTP客户端小型框架模块有:...

    Tomcat面试专题.pdf

    4、tomcat 容器是如何创建 servlet 类实例?用到了什么原理? 5.tomcat 如何优化? 6.内存调优 7.垃圾回收策略调优 8.共享 session 处理 8.添加 JMS 远程监控 9.专业点的分析工具有哪些 10.关于 Tomcat 的 session ...

    EasyJWeb开发者指南

    工具类 24 CommUtil 25 分页 25 tagUtil 26 验证码 26 容器部分 28 EasyJWeb的容器 28 IoC 28 EasyJWeb中的容器 28 集成其他容器 32 EasyJWeb中的AOP 35 AOP和拦截器 35 EasyJWeb中的拦截器 35 Ajax支持 35 Ajax概述...

Global site tag (gtag.js) - Google Analytics