0
点赞
收藏
分享

微信扫一扫

HTTP 中 ServletContext 对象


一、获取 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"

三、实现文件下载

步骤:


  1. 定义html页面,编辑超链接 href 属性,指向 Servlet,传递资源名称 filename
  2. 定义 Servlet 

  1. 获取文件名称
  2. 使用字节输入流加载文件进内存
  3. 指定 response 的响应头
  4. 将数据写到 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>



举报

相关推荐

0 条评论