说起ServletContext,一些人会产生误解,以为一个servlet对应一个ServletContext。其实不是这样的,事实是一个web应用对应一个ServletContext,所以ServletContext的作用范围是整个应用,明确这点很重要,这是基础中的基础。
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
request.getServletContext();
this.getServletContext();
public class ContextServletDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request获取
ServletContext context1 = request.getServletContext();
//HttpServlet获取
ServletContext context2 = this.getServletContext();
System.out.println(context1 == context2); //true
}
public class ContextServletDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpServlet获取
ServletContext context = this.getServletContext();
//定义文件名称
String fileName = "a.jpg";
//获取MIME类型
String mimeType = context.getMimeType(fileName);
System.out.println(mimeType);//image/jpeg
}
3. 获取文件的真实(服务器)路径
方法:String getRealPath(String path)
String b = context.getRealPath("/b.txt");//web目录下资源访问
System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
System.out.println©;
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
System.out.println(a);
public class ContextServletDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpServlet获取
ServletContext context = this.getServletContext();
//获取文件的服务器路径
String realPath = context.getRealPath("/b.txt");//web目录下资源
String realPath1 = context.getRealPath("/WEB-INF/classes/a.txt");//src路径下资源
System.out.println(realPath);
System.out.println(realPath1);
}
文件下载需求:
1. 页面显示超链接
2. 点击超链接后弹出下载提示框
3. 完成图片文件下载
简单的html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>download</title>
</head>
<body>
<a href="/xiang/img/tou.jpg">图片</a>
<hr>
<a href="/xiang/downloadServlet?filename=tou.jpg">图片</a>
</body>
</html>
servlet页面
package com.xiang.web.download;
import javax.servlet.ServletContext;
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.FileInputStream;
import java.io.IOException;
/**
* @author Xiang
* @date 2020/07/14
*/
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("filename");
//文件服务器路径
ServletContext context = this.getServletContext();
String realPath = context.getRealPath("/img/"+filename);
//字节流关联
FileInputStream fis = new FileInputStream(realPath);
//设置响应头
//响应头类型
String mimeType = context.getMimeType(filename);
response.setHeader("content-type",mimeType);
//响应头打开方式
response.setHeader("content-disposition","attachment;filename="+filename);
//输入流的数据写出到输出流中
ServletOutputStream sos = response.getOutputStream();
byte[] buff = new byte[1024 * 8];
int len =0;
while ((len = fis.read(buff)) != -1){
sos.write(buff,0,len);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
img图片路径
本文地址:https://blog.csdn.net/xiangjunyes/article/details/107305516
如对本文有疑问, 点击进行留言回复!!
springmvc之ResponseBody响应json数据遇到的错误及解决
uni-app 后台升级 静默升级 uniapp 后台更新 静默更新 在线升级
SpringBoot多Module启动报错Could not transfer metadata
Hibernate项目报错:Cannot call sendError() after the response has been committed
网友评论