【Java.Web】Servlet —— 实例 之 下载文件

来源:互联网 发布:c语言入门书籍 知乎 编辑:程序博客网 时间:2024/05/18 02:53


下载文件

下载文件是指把服务器端的文件发送到客户端,Servlet能够向客户端发送任意格式的文件数据。


创建一个Servlet并实现doGet方法:

package com.gof.test.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.InputStream;import java.io.OutputStream;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = -2685898734668250794L;protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{String filename = req.getParameter("filename");if (filename == null){return;}InputStream in = getServletContext().getResourceAsStream("/reports/" + filename);OutputStream out = resp.getOutputStream();BufferedInputStream bis = new BufferedInputStream(in);BufferedOutputStream  bos= new BufferedOutputStream(out);int length =in.available() ;// Set Responseresp.setContentType("application/force-dwonload");resp.setHeader("Content-Length", String.valueOf(length));resp.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");byte[] buffer = new byte[1024];int bytesRead = -1;while ( (bytesRead = bis.read(buffer)) != -1){bos.write(buffer, 0, bytesRead);}bos.flush();bis.close();bos.close();in.close();out.close();}}


在web.xml中注册该servlet:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name>Base Java Webapp</display-name>  <description>A Basic Maven Java Webapp Application</description>    <welcome-file-list>      <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <!-- test url: http://localhost:8080/base-webapp/download?filename=testreport.txt -->  <servlet>  <servlet-name>downloadtest</servlet-name>  <servlet-class>com.gof.test.servlet.DownloadServlet</servlet-class>  </servlet>  <servlet-mapping>      <servlet-name>downloadtest</servlet-name>      <url-pattern>/download</url-pattern>  </servlet-mapping>  </web-app>



在webapp的根目录下添加文件夹reports,并创建一个名为testreport.txt的文件:



在浏览器中访问如下URL:

http://localhost:8080/base-webapp/download?filename=testreport.txt

下载文件。



0 0
原创粉丝点击