response实现文件下载功能
DownloadServlet.java
package com.heima.web;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/*
【文件下载】两个头+两个流(流拷贝)
1. 设置响应头:Content-Disposition 告诉浏览器以附件的形式来处理文件;
2. 设置响应头: response.setContentType(mimeType) 告诉浏览器下载的文件的类型;
3. 流拷贝:
1. 将文件读取到流里边: FileInputStream fin = new FileInputStream(file);
2. 将流写给浏览器:response.getOutputStream().write(arr,0,len);
*/
@WebServlet(urlPatterns = "/download")
public class DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//文件下载
//1.获取文件资源
//获取文件名
String fileName = request.getParameter("fileName");
System.out.println("fileName = " + fileName);
File file = new File(getServletContext().getRealPath("/download/") + fileName);
//2.设置两个响应头文件
//给浏览器设置响应头:Content-Disposition 告诉浏览器以附件的形式打开这个文件
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
//给浏览器设置响应头:文件类型 response.setContentType(mimetype);
//获取文件的mimeType
String mimeType = getServletContext().getMimeType(fileName);
response.setContentType(mimeType);
//3.设置两个流,进行流拷贝操作
//读取文件资源
FileInputStream fileInputStream = new FileInputStream(file);
//从response中获取输出流
ServletOutputStream outputStream = response.getOutputStream();
//流拷贝
int len = 0;
byte[] arr = new byte[1024];
while ((len = fileInputStream.read(arr)) != -1) {
outputStream.write(arr, 0, len);
//随着response关闭
// outputStream.close();
}
}
}
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<!-- a标签下载资源
1.有的资源是以附件的形式下载了,有的资源没有下载,直接被浏览器打开。
2.无法对下载进行权限的控制
-->
<h2>a标签下载</h2>
<a href="download/1.jpg">1.jpg</a><br>
<a href="download/2.txt">2.txt</a><br>
<a href="download/3.zip">3.zip</a><br>
<a href="download/Sublime.exe">Sublime.exe</a><br>
<a href="download/Git-2.33.1-64-bit.exe">Git-2.33.1-64-bit.exe</a><br>
<br>
<br>
<br>
<h2>java代码下载</h2>
<a href = "/download?fileName=1.jpg">1.jpg</a><br>
<a href = "/download?fileName=2.txt">2.txt</a><br>
<a href = "/download?fileName=3.zip">3.zip</a><br>
<a href = "/download?fileName=Sublime.exe">Sublime.exe</a><br>
<a href = "/download?fileName=Git-2.33.1-64-bit.exe">Git-2.33.1-64-bit.exe</a><br>
</body>
</html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<base href="<%=basePath%>"/>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>首页</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
<div align="center">
<a
href="/queryList" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>
</div>
<div align="center">
<a
href="/findUserByPage" style="text-decoration:none;font-size:33px">分页查询用户信息
</a>
</div>
<div align="center">
<a
href="login.jsp" style="text-decoration:none;font-size:33px">客户登录
</a>
</div>
<div align="center">
<a
href="download.html" style="text-decoration:none;font-size:33px">文件下载
</a>
</div>
</body>
</html>