一、获取 ServletContext 对象
ServletContext 对象代表整个 web 应用,可以和程序的容器进行通信,即和服务器通信,用来交互数据,获取 ServletContext 对象有两种方法:
1、通过 request 对象获取
- request.getServletContext();
2、通过 HttpServlet 获取
- this.getServletContext();
//获取 ServletContext 对象的两种方法
ServletContext SC1 = request.getServletContext();
ServletContext SC2 = this.getServletContext();
二、ServletContext 功能
1、获取 MIME类型
- MIME 类型:在互联网通信过程中定义的一种文件数据类型
- 格式:大类型/小类型 eg:text/html image/jpeg
- 获取方法:String getMimeType(String file)
//获取MIME类型
ServletContext SC1 = request.getServletContext();
String name = "a.jpg";
String mime = SC1.getMimeType(name);
System.out.println(mime);
2、域对象:共享数据
- setAttribute(String name,Object value):获取值
- getAttribute(String name):通过名称获取值
- removeAttribute(String name):通过名称移除值
ServletContext 对象范围:所有用户请求的数据
3、获取文件的真实路径
在开发过程中,会有配置资源文件需要加载,而配置资源文件所放的位置会有不同,这时就需要获取文件的真实路径
- 方法:String getRealPath(s),对于参数 s 的要求(以 a.txt 为例):
- 配置文件放在 web 目录下:"/a.txt"
- 配置文件放在 WEB-INF 目录下:"/WEB-INF/a.txt"
- 配置文件放在 src 目录下:"/WEB-INF/classes/a.txt"
三、实现文件下载
步骤:
- 定义html页面,编辑超链接 href 属性,指向 Servlet,传递资源名称 filename
- 定义 Servlet
- 获取文件名称
- 使用字节输入流加载文件进内存
- 指定 response 的响应头
- 将数据写到 response 输出流
Java文件:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求参数(文件名称)
String filename = request.getParameter("filename");
//使用字节输入流加载进内存
//找到文件服务器路径
ServletContext SC = this.getServletContext();
String realPath = SC.getRealPath("/pic/" + filename);
//用字节流关联
FileInputStream FIS = new FileInputStream(realPath);
//设置response相应头
String name = SC.getMimeType(filename);
//设置响应头类型
response.setHeader("content-type",name);
//设置响应头的打开方式
response.setHeader("content-disposition","attachment;filename=" + filename);
//将输入流的数据写到输出流中
ServletOutputStream SOS = response.getOutputStream();
byte[] buf = new byte[1024 * 4];
int lenth;
while ((lenth = FIS.read(buf)) != -1){
SOS.write(buf,0,lenth);
}
FIS.close();
}
HTML文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Download</title>
</head>
<body>
<a href="/servletContext?filename=1.jpeg" >图片</a>
</body>
</html>