ServletContext详解
ServletContext
基本介绍

你可以把它想象成一个公用的空间,可以被所有的客户访问,也就是说A客户端可以访问D,B客户端可以访问D,C客户端也可以访问D。
WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用。并且它被所有客户端共享。
ServletContext对象可以通过ServletConfig.getServletContext()方法获得对ServletContext对象的引用,也可以通过this.getServletContext()方法获得其对象的引用。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。
当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁
怎么使用ServletContext
使用ServletContext:
(1) 如何得到ServletContext对象
this.getServletContext();
this.getServletConfig().getServletContext();
request.getSession().getServletContext();
(2) 方法
添加属性:setAttribute(String name, Object obj);
得到值:getAttribute(String name),//这个方法返回Object
删除属性:removeAttribute(String name)
得到Mime类型(大类型/小类型,jpeg):context.getMinmeType(filename);
获取服务器真是文件路径: context.getRealPath(fileNamePath(相对路径));
(3) 生命周期
ServletContext中的属性的生命周期从创建开始,到服务器关闭结束。
应用
文件下载
//获取请求下载参数文件名称
String filename = request.getParameter("filename");
ServletContext servletContext = this.getServletContext();
//获取服务器真实路径
String realPath = servletContext.getRealPath("./imagename");
//文件输入流
FileInputStream fileInputStream = new FileInputStream(realPath);
//设置response响应头
//1.设置响应头类型
String mimeType = servletContext.getMimeType(filename);
response.setHeader("context-type",mimeType);
//设置响应头打开方式
response.setHeader("content-disposition","attachment;filename="+filename);//filename时下载时显示的名称
ServletOutputStream outputStream = response.getOutputStream();
byte[] buff = new byte[1024*8];
int len = 0;
while ((len=fileInputStream.read(buff))!=-1){
outputStream.write(buff,0,len);
}
outputStream.flush();
outputStream.close();
fileInputStream.close();

浙公网安备 33010602011771号