`

下载处理Servlet工具类

 
阅读更多
转自 http://javatar.iteye.com/blog/72265
项目中用到下载功能,一般都使用超链接做下载,
但txt, html, csv等会被浏览器直接打开,
写了一个工具类处理这个问题。
很简单,放上来备忘。

package com.xxx.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 下载处理Servlet
 * @author liangfei0201@163.com
 *
 */
public class DownloadServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	private static final String DEFAULT_ENCODING = "UTF-8";
	
	private static final int DEFAULT_BUFFER_SIZE = 4096;
	
	private String encoding = DEFAULT_ENCODING;
	
	private int bufferSize = DEFAULT_BUFFER_SIZE;
	
	public void init(ServletConfig sc) throws ServletException {
		super.init(sc);

		String paramEncoding = sc.getInitParameter("encoding");
		if (paramEncoding != null && paramEncoding.trim().length() > 0) {
			encoding = paramEncoding.trim();
		}
		
		String paramSize = sc.getInitParameter("bufferSize");
		if (paramSize != null && paramSize.matches("^[0-9]+$")) {
			bufferSize = Integer.parseInt(paramSize);
		}
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 查找文件
		File file = new File(getServletContext().getRealPath("/") + request.getServletPath());
		if (! file.exists()) {
			response.sendError(HttpServletResponse.SC_NOT_FOUND);
			return ;
		}
		
		// 设置response, 这几行是关键
		response.setContentType("application/x-msdownload; charset=" + encoding);
		response.addHeader("content-type", "application/x-msdownload;");
		response.addHeader("content-disposition", "attachment; filename="+ response.encodeURL(file.getName()));
		response.setContentLength((int)file.length());
		
		// 输出
		InputStream in = new FileInputStream(file);
		OutputStream out = response.getOutputStream();
		try {
			int length = 0;
			byte[] buffer = new byte[bufferSize];
			while ((length = in.read(buffer)) != -1) {
				out.write(buffer, 0, length);
			}
			out.flush();
		} finally {
			if (in != null) {
				in.close();
			}
		}
	}

}


<servlet>
	<servlet-name>download</servlet-name>
	<servlet-class>com.xxx.servlet.DownloadServlet</servlet-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>GBK</param-value>
	</init-param>
	<init-param>
		<param-name>bufferSize</param-name>
		<param-value>8192</param-value>
		</init-param>
	<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>download</servlet-name>
	<url-pattern>/download/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>download</servlet-name>
	<url-pattern>*.csv</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>download</servlet-name>
	<url-pattern>*.txt</url-pattern>
</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请求后进行处理,并向客户端返回响应。在...

    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版本的实现,它为开发者提供了处理...

    servlet模拟器

    Servlet模拟器是一种工具,它能够帮助开发者理解和测试Servlet程序,而无需实际部署到Web服务器上。在这个场景下,我们主要关注两个关键知识点:servlet的配置与解析,以及XML解析。 首先,让我们深入了解servlet。...

Global site tag (gtag.js) - Google Analytics