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


下载文件

下载文件是指把服务器端的文件发送到客户端,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 Response
		resp.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的文件:

【Java.Web】Servlet —— 实例 之 下载文件_第1张图片


在浏览器中访问如下URL:

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

下载文件。



你可能感兴趣的:(java,Web)