- 浏览: 100667 次
- 性别:
- 来自: 广州
文章分类
最新评论
一、如何使用
如果此Servlet命名为download,请求的URL为:/download?path=xxx,请求后出现下载窗口:
二、源码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileDownload extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 服务器相对路径
String path = req.getParameter("path");
// 服务器绝对路径
path = getServletContext().getRealPath("/") + path;
// 检查文件是否存在
File obj = new File(path);
if (!obj.exists()) {
res.setContentType("text/html;charset=GBK");
res.getWriter().print("指定文件不存在!");
return;
}
// 读取文件名:用于设置客户端保存时指定默认文件名
int index = path.lastIndexOf("\\"); // 前提:传入的path字符串以“\”表示目录分隔符
String fileName = path.substring(index + 1);
// 写流文件到前端浏览器
ServletOutputStream out = res.getOutputStream();
res.setHeader("Content-disposition", "attachment;filename=" + fileName);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(path));
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}
}
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileDownload extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 服务器相对路径
String path = req.getParameter("path");
// 服务器绝对路径
path = getServletContext().getRealPath("/") + path;
// 检查文件是否存在
File obj = new File(path);
if (!obj.exists()) {
res.setContentType("text/html;charset=GBK");
res.getWriter().print("指定文件不存在!");
return;
}
// 读取文件名:用于设置客户端保存时指定默认文件名
int index = path.lastIndexOf("\\"); // 前提:传入的path字符串以“\”表示目录分隔符
String fileName = path.substring(index + 1);
// 写流文件到前端浏览器
ServletOutputStream out = res.getOutputStream();
res.setHeader("Content-disposition", "attachment;filename=" + fileName);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(path));
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}
}
三、web.xml配置
<servlet>
<servlet-name>FileDownload</servlet-name>
<servlet-class>com.fastunit.test.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<servlet-class>com.fastunit.test.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
四、补充说明
本例只是一个简单实现,应用时需要在实际环境中处理以下问题:
1. 权限问题:结合实际系统增加用户权限控制
2. 中文文件名:中文问题与运行环境有关,不同环境下解决方式也有差异,一般可通过转码来解决。
3. 文件类型:文件类型统一时可直接指定,如res.setContentType("application/zip");文件类型不确定时可不设、设一个不存在的、或通过解析文件名后缀来设置,以实际测试通过为准。
来自:http://www.blogjava.net/fastunit/archive/2008/01/22/177034.html
发表评论
-
【转】导出网页中的table到excel 使用Java方式
2011-08-04 12:02 1705response.setContentType(&qu ... -
【转】oracle 行转列
2011-05-12 14:50 952数据库查询中难免会遇到行列转换的情况,摘列一些较精典的 ... -
【转】select元素javascript常用操作
2011-05-03 16:15 690/*-------------------------- ... -
【转】使用Spring的NamedParameterJdbcTemplate完成DAO操作
2011-04-22 15:33 1127NamedParameterJdbcTemplate内 ... -
【转】使用Spring的SimpleJdbcTemplate完成DAO操作
2011-04-22 15:31 1011SimpleJdbcTemplate内部包含了一个Na ... -
【转】Oracle:Merge Into 语句代替Insert/Update在Oracle中的应用实战
2011-04-13 14:30 2075动机: 想在Oracle中 ... -
【转】直接把EXCEL粘贴到网页上
2011-04-06 08:33 1251<html> <meta http- ... -
【转】word 任意页开始插入页码
2011-03-31 15:45 1098一、如果你想从第二页开始插入页码的话: 1、将鼠标定位 ... -
【转】最简单的java模板引擎——JTPL
2011-03-27 15:31 2524sample1.jtpl < ... -
【转】JS特效代码大全(七)超全的JS树形菜单共享
2011-03-25 08:59 1269JS特效代码大全(七)超全的JS树形菜单共享 标 ... -
【转】JavaScript获取select的值全解
2011-03-24 15:53 849获取显示的汉字 document.getElemen ... -
【转】常用的JavaScript验证正则表达式
2011-03-07 13:22 775下面都是我收集的一些比较常用的正则表达式,因为平常可能在 ... -
【转】flex的问题解决
2011-02-27 03:05 1309出自:http://www.iteye.com/problem ... -
【转】软考、职称、职称资格及三者之间的关系
2010-08-02 09:19 1508目前,人事部 ... -
【转】如何学Flex
2010-07-31 18:54 889如何学Flex 近由于 ... -
【转】javamail发送邮件的简单实例
2010-07-29 11:19 1170今天学习了一下JavaMail,javamail发送 ... -
【转】hibernate的Criteria Query
2010-07-29 10:03 1165当查询数据时,人们往往需要设置查询条件。在SQL或HQ ...
相关推荐
在这个场景中,我们关注的是如何使用Servlet来实现文件的上传和下载功能,同时结合Tomcat服务器和XML文件进行数据存储。以下是关于这些知识点的详细说明: 1. **Servlet**: Servlet是Java EE规范的一部分,它是一...
在本篇讨论中,我们将深入探讨如何利用Servlet实现文件上传功能,以及在这个过程中涉及的关键知识点。 首先,我们需要了解HTTP协议。HTTP协议是无状态的,这意味着每次请求都是独立的。因此,在客户端(通常是...
Java Servlet是Java EE的一部分,提供了一种处理HTTP请求和响应的标准方式,而SWFUpload则是一个JavaScript库,它允许在Flash环境中实现文件的多文件、分块上传,特别适合处理大文件。 **Java Servlet大文件上传** ...
com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做上传进度条的 jquery-1.9.1.js index.jsp:文件列表页面 upload.jsp:文件上传form...
Servlet是Java Web应用程序的核心组件之一,它用于处理来自客户端(通常是Web浏览器)的...通过深入学习和分析`servlet-src`源码,我们可以更深入地理解Servlet的工作机制,这对于Java Web开发和问题排查具有重要意义。
在本项目"Servlet实现登录注册等源码"中,我们看到的是一个基于Servlet、MySQL数据库和JDBC(Java Database Connectivity)的技术栈来构建的用户管理功能,包括用户注册、登录以及可能的个人资料更新(如上传头像)...
在标题"Servlet过滤器的简单使用源码+文档"中,我们可以理解为这个压缩包包含了一个关于Servlet过滤器的基础应用示例,以及相关的源代码和文档资料。描述中提到的"实现一个登陆界面",表明了过滤器可能被用作验证...
通过学习和分析这些源码,你可以深入了解Servlet的工作流程,掌握如何处理HTTP请求,以及如何利用Servlet实现动态网页。韩顺平老师的讲解将帮助你更好地理解和运用这些知识,提升你的Java Web开发技能。
6. Servlet在这些方法中处理业务逻辑,可能涉及数据库操作、文件读写等。 7. 处理完成后,Servlet通过ServletResponse对象向客户端返回响应。 8. 当Servlet不再需要时,容器调用destroy()方法释放资源。 反编译...
【Java JSP+Servlet 图书管理系统源码解析】 在IT领域,Java是一种广泛使用的编程语言,尤其在构建Web应用程序方面。本系统“java jsp+servlet图书管理系统”就是利用Java技术栈,结合JSP(JavaServer Pages)和...
在本项目中,"servlet实现学生信息管理系统源码"是一个使用Java编程语言开发的Web应用程序,主要目标是实现对学生信息的高效管理。这个系统基于Servlet技术,它是一种用于构建动态Web应用的标准Java API,提供了...
实现简单的文件上传功能。 在工程中加入io和upload组件的方法: Windows-preferences-Java-buildpath-userlibraries 右击工程名:buildpath-config buildpath-libraries-addlibraries-userliraries-next,加入包即可...
`GenericServlet`是抽象类,实现了`Servlet`接口,提供通用的Servlet实现。`ServletConfig`接口包含了Servlet的配置信息,而`ServletContext`接口则代表了整个Web应用的上下文。 **2. javax.servlet.http包** 此包...
在给定的"javax.servlet源码.zip"文件中,你将能够看到 javax.servlet 包内所有相关类和接口的源代码。这些源代码对于理解Servlet工作原理、学习如何编写自定义Servlet和过滤器以及调试与Servlet相关的代码非常有...
在Java Web开发中,Servlet是...总结,使用Servlet实现增删改查涉及了HTTP请求处理、数据库操作、响应生成等多个环节,是理解Web应用开发的关键步骤。通过这个项目,初学者能够学习到如何在实际环境中运用Servlet技术。
在这个场景下,我们将探讨如何结合`jQuery ajaxFileUpload` 和Servlet实现文件上传的功能。 首先,`jQuery ajaxFileUpload` 插件允许用户在不刷新页面的情况下上传文件,提供了一种友好的用户体验。它的主要优点...
通过阅读源码,我们可以理解Servlet API的工作机制,了解请求和响应对象的内部实现,以及容器如何管理Servlet的生命周期。这对于优化性能、调试问题以及自定义Servlet行为都非常有帮助。 在实际开发中,我们通常...
这篇博客"答Servlet下载文件的附件"可能涉及了如何利用Servlet来实现文件的下载功能,让我们深入探讨这个话题。 首先,我们需要了解Servlet生命周期中的service()方法。当一个HTTP请求到达服务器,Servlet容器(如...
标题中的"servlet源码"指的是Apache Tomcat服务器内实现Servlet功能的源代码。这个压缩包文件"apache-tomcat-7.0.28-src"包含了Tomcat 7.0.28版本的全部源代码,对于理解Servlet的工作原理、学习服务器端编程以及...
本项目是一款基于Java语言的Servlet技术实现的设计源码,包含共计233个文件,其中XML配置文件47个,PNG图片文件28个,首选项文件25个,Java类文件25个,Java源文件22个,属性文件11个,模块文件10个,类路径文件9个...