项目中用到下载功能,一般都使用超链接做下载,
但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 Web开发中一个实用的组件,它封装了复杂的文件操作逻辑,使开发者能更高效、安全地处理文件上传和下载任务。这个工具类基于"孤傲苍狼"的实现,具有较高的稳定性和灵活性,...
Java开发Servlet时,使用JDBC(Java Database Connectivity)工具类是一种常见的操作,它允许程序员与各种类型的数据库进行交互。在给定的描述中,我们提到的是一个自定义封装的JDBC工具类库,这个库提供了数据库...
总结来说,ServletAPI是Java Web开发的核心,提供了处理HTTP请求的强大工具,结合JSP可以构建出复杂的Web应用程序。通过学习和掌握ServletAPI,开发者可以更好地理解和构建服务器端逻辑,提升Web应用的性能和用户...
在深入探讨这个工具类之前,我们首先需要理解Servlet的基本概念。Servlet是Java编程语言中用于扩展服务器功能的接口,主要用于Web应用程序。它是由Java Servlet API定义的,允许开发者创建动态响应HTTP请求的服务。 ...
在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,它可以处理来自客户端(通常是浏览器)的请求,并向客户端发送响应。在这个特定的场景中,"java下载类(servlet)"指的是一个使用Servlet技术来实现...
在IT行业中,文件上传下载是Web应用中常见的功能,尤其在服务器端编程中,Servlet扮演着重要的角色。Servlet是Java编程语言中用于扩展服务器功能的接口,它可以在接收到HTTP请求后进行处理,并向客户端返回响应。在...
以下是对"java文件上传下载工具类"这一主题的详细解释。 首先,让我们了解文件上传。在Web应用中,用户可能需要上传文件,如图片、文档或视频。Java通过Servlet API提供了处理文件上传的功能。Servlet 3.0及以上...
导入`javax.servlet.jar`后,确保你的IDE或构建工具已经更新了类路径,这样编译器和运行时环境才能找到所需的类。 5. **Tomcat和Java EE服务器** `javax.servlet.jar`通常是Java EE兼容服务器(如Tomcat、Jetty、...
NetBeans提供了可视化的工具来创建Servlet类,设置部署描述符(`web.xml`),以及进行调试和测试。 在这个项目中,`readme.txt`可能是项目说明文档,详细描述了项目的使用方法、注意事项以及可能遇到的问题。而`...
总的来说,BeanUtil工具类是Java Web开发中的实用工具,它简化了Servlet处理表单数据和JavaBean之间数据转换的过程,让代码更简洁、更易于维护。在学习和使用BeanUtil时,还需要了解其潜在的类型转换问题和安全性...
3. **文件上传工具类**:文件上传是Web应用中的常见功能,Java提供了Servlet API来处理文件上传请求。Apache的Commons FileUpload库提供了一套方便的工具类,可以解析多部分请求,将文件保存到服务器。这类工具类...
总的来说,Servlet API JAR是Java Web开发不可或缺的一部分,它提供了处理HTTP请求的核心工具,使得开发者可以专注于业务逻辑,而不是底层网络通信的复杂性。通过理解和熟练运用Servlet API,可以创建高效、可扩展的...
通常,Servlet API的源码会包含在像servlet.jar这样的库文件中,开发者可以通过反编译工具查看或下载官方提供的源码包。 在Java EE环境中,Servlet API是通过Web容器(如Tomcat、Jetty等)来支持的。开发者编写实现...
在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象。由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-...
- 使用Maven或Gradle等构建工具时,可以在pom.xml或build.gradle文件中添加对应的依赖,这样在构建过程中会自动下载并引入这些库。 5. **Servlet生命周期** - 初始化:当Servlet首次被请求或者在web.xml中配置了`...
这里我们关注的是一个自定义的Util工具类,它特别针对Excel2007格式进行了优化,同时也兼容其他版本的Excel处理。这个工具类结合了文件上传、JSON解析以及Form表单提交等技术,提供了强大的文件处理能力。 首先,让...
本资源提供了两种实现方式:基于Servlet和Struts2(Action)的验证码工具类。以下是对这两个版本的验证码工具类的详细解释。 ### Servlet版验证码工具类 1. **验证码生成**: Servlet版本的验证码工具类通常会...
Servlet API提供了许多工具类,如`RequestDispatcher`用于请求转发和重定向,`Cookie`用于管理客户端的持久性数据,`Session`用于跟踪用户会话。 七、Servlet与JSP的配合 Servlet通常用于处理业务逻辑,而JSP则专注...
在没有使用像Maven或Gradle这样的依赖管理工具的情况下,手动下载和管理像`servlet-2.5.jar`这样的库文件是非常常见的做法。 总结来说,"servlet-2.5.jar"是Java Servlet API 2.5版本的实现,它为开发者提供了处理...
Servlet模拟器是一种工具,它能够帮助开发者理解和测试Servlet程序,而无需实际部署到Web服务器上。在这个场景下,我们主要关注两个关键知识点:servlet的配置与解析,以及XML解析。 首先,让我们深入了解servlet。...