把文件目录直接暴露给用户是很不安全的。所以要用Servlet来做,而且这样做,文件的存储方式就更丰富了,可以是从文件系统上取来的,也可以是数据库中经过计算生成的,或者从其它什么稀奇古怪的地方取来的。
public class DownloadServlet extends HttpServlet {
private String contentType = "application/x-msdownload";
private String enc = "utf-8";
private String fileRoot = "";
/**
* 初始化contentType,enc,fileRoot
*/
public void init(ServletConfig config) throws ServletException {
String tempStr = config.getInitParameter("contentType");
if (tempStr != null && !tempStr.equals("")) {
contentType = tempStr;
}
tempStr = config.getInitParameter("enc");
if (tempStr != null && !tempStr.equals("")) {
enc = tempStr;
}
tempStr = config.getInitParameter("fileRoot");
if (tempStr != null && !tempStr.equals("")) {
fileRoot = tempStr;
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filepath = request.getParameter("filepath");
String fullFilePath = fileRoot + filepath;
/*读取文件*/
File file = new File(fullFilePath);
/*如果文件存在*/
if (file.exists()) {
String filename = URLEncoder.encode(file.getName(), enc);
response.reset();
response.setContentType(contentType);
response.addHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
int fileLength = (int) file.length();
response.setContentLength(fileLength);
/*如果文件长度大于0*/
if (fileLength != 0) {
/*创建输入流*/
InputStream inStream = new FileInputStream(file);
byte[] buf = new byte[4096];
/*创建输出流*/
ServletOutputStream servletOS = response.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
}
}
web.xml
<servlet>
<servlet-name>downloadservlet-name>
<servlet-class>org.mstar.servlet.DownloadServletservlet-class>
<init-param>
<param-name>fileRootparam-name>
<param-value>d:/tempparam-value>
init-param>
<init-param>
<param-name>contentTypeparam-name>
<param-value>application/x-msdownloadparam-value>
init-param>
<init-param>
<param-name>encparam-name>
<param-value>utf-8param-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>downloadservlet-name>
<url-pattern>/downurl-pattern>
servlet-mapping>
分享到:
相关推荐
总结来说,"servlet上传下载文件"是一个使用Java Servlet实现的Web应用程序,允许用户上传文件至服务器,并能够从服务器下载这些文件。这个系统的核心在于Servlet的`doPost`或`doGet`方法,它们处理HTTP请求,读取或...
总结一下,这个"Servlet文件下载项目"展示了如何使用Servlet技术实现一个简单的文件下载服务。通过理解Servlet的工作原理、HTTP响应头的设置以及Java I/O流的使用,我们可以构建出更复杂、更安全的文件下载系统。这...
文件下载servlet,java文件下载。
在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...
在IT行业中,文件上传与下载是Web应用中常见的功能,特别是在企业级系统中,例如文档管理系统、在线教育平台等。Servlet作为Java Web开发中的一个重要组件,常被用来处理这些操作。下面将详细介绍如何使用Servlet...
Java Servlet是一种Java编程语言...通过这个简单的Java Servlet实现,我们可以为用户提供一个安全、可控的文件下载服务。理解这些基本步骤和相关的HTTP概念,将有助于你更好地设计和实现Web应用程序中的文件下载功能。
这个链接会指向一个`servlet`,由`servlet`来处理实际的文件读取和下载逻辑。 1. **创建Servlet**:首先,我们需要创建一个自定义的`servlet`,例如`FileDownloadServlet`。在`src`目录下的Java源代码文件中,我们...
总的来说,"文件上传下载servlet自用"项目是一个实现Web应用中文件交互的示例,涉及到Servlet、文件I/O操作以及HTTP协议的理解。在实际开发中,这样的功能可以广泛应用于用户资料上传、文件共享、云存储等多种场景。...
1. **初始化**:Servlet容器在启动时会读取配置文件(如`server.xml`),解析其中的Web应用上下文定义,为每个Web应用创建一个Context对象。Context对象管理着Web应用的生命周期,包括Servlet和JSP的加载、部署和...
在JSP页面上,你可以创建一个表单让用户选择要下载的文件,或者通过JavaScript、AJAX等方式异步提交文件列表到Servlet。记得在JSP中设置正确的方法(GET或POST)和Servlet的URL。 在实际应用中,为了安全和性能,你...
以下是一个简单的文件下载Servlet示例: ```java @WebServlet("/FileDownloadServlet") public class FileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, ...
Servlet-api.jar是Java Web开发中不可或缺的一个库文件,它包含了Servlet和JSP(JavaServer Pages)规范的API接口。这个库文件主要用于与Web服务器交互,处理HTTP请求,并生成响应。在本文中,我们将深入探讨Servlet...
本文将详细介绍一个基于Servlet的文件下载代码示例,并对其实现原理进行深入分析。 #### 二、技术背景 在Java Web开发中,Servlet是一种重要的技术,用于处理HTTP请求并返回响应。Servlet由Sun Microsystems公司...
在这个简单的Servlet示例中,我们将会探讨如何创建和运行一个基本的Servlet,以及它与JavaScript的交互。 首先,Servlet是一个Java类,它扩展了Java的`javax.servlet.Servlet`或`javax.servlet.http.HttpServlet`...
以下是一个基本的文件下载Servlet片段: ```java @WebServlet("/download") public class FileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse ...
com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做上传进度条的 jquery-1.9.1.js index.jsp:文件列表页面 upload.jsp:文件上传form...
赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; 包含翻译后的API文档:javax.servlet-api-4.0.0...
1. 创建Servlet:创建一个Servlet类,重写doGet或doPost方法,处理下载请求。 2. 文件定位:获取请求中包含的文件路径,确保文件安全访问。 3. 打开文件流:使用FileInputStream打开文件,准备读取。 4. 设置响应头...
这篇博客"答Servlet下载文件的附件"可能涉及了如何利用Servlet来实现文件的下载功能,让我们深入探讨这个话题。 首先,我们需要了解Servlet生命周期中的service()方法。当一个HTTP请求到达服务器,Servlet容器(如...
结合JSON(JavaScript Object Notation)和Servlet,我们可以实现一个高效且用户友好的文件下载系统。以下是对这个"ajax+json+servlet下载"主题的详细解释。 首先,我们需要理解Ajax的核心原理。Ajax通过...