1.ServletContext原理
ServletContext简介:
Tomcat启动的时候,需要识别webapps下的各个WEB应用,识别各个WEB应用的同
时为*每个WEB应用创建对应的对象ServletContext
*,**一个WEB应用对应一个
ServletContext.**每个ServletContext中都有一个很大的MAP,并且tomcat在启动之初就向
这个MAP中放入了大量的键值对的数据.当然我们也可以通过程序向这个大的MAP中
放入键值对的数据.
注意:一个web应用对应唯一的一个ServletContext对象
ServletContext生命周期
同整个web应用的生命周期一致
ServletContext的作用
1_如何获取ServletContext对象
ServletContext servletContext=getServletContext();
通过观察:
SevletContext中已经存放了很多键值对的数据
全局的WEB.xml+当前WEB的web.xml
当前WEB路径
2_多个Servlet之间共享数据 attribute:属性
由于一个WEB应用只有一个ServletContext对象,当我们在访问服务端的Servlet时,都可以在Servlet中获取到当前应用唯一的ServletContext对象,所以可以利用ServletContext对象来实现共享数据.
ServletContext.setAttribute(name, object);
向ServletContext中的MAP设置键值对的数据:键名是字符串类型,值为Object类型
ServletContext.getAttribute(name);
从ServletContext中的MAP获取数据,通过键名获取对应的值: 返回类型为Object
ServletContext.getAttributeNames();
从ServletContext中的MAP获取MAP中所有的键名,返回一个枚举类型
ServletContext.removeAttribute(name);
从ServletContext中的MAP通过键名移除对应的值
3_获取到WEB项目下指定资源
WEB项目的运行位置和源码位置不在同一个位置,有时候我们需要获取到WEB项目在
运行过程中,指定资源的真实路径或者指定资源的输入流,此时可以通过ServletContext来获取?为什么可以获取到?因为ServletContext里存放了当前web项目的路径等信息.
String realPath=
ServletContext.getRealPath("/WEB-INF/conf/conf01.properties")
获取服务端指定目录下指定资源/目录的真实路径
InputStream is=
ServletContext.getResourceAsStream("/WEB-INF/conf/conf01.properties")
获取服务端指定目录下指定文件的输入流对象
4_获取到整个WEB全局的配置信息
我们之前在WEB中是为Servlet配置过键值对的数据,这些数据只能在当前的Servlet中获取到,如果希望配置一些参数,这些数据可以在所有Servlet都可以获取到,此时我们可以为当前应用配置全局的参数信息.配置方式如下:
<!-- 全局的配置参数:所有的Servlet都可以获取到的
局部的Servlet配置参数:当前的Servlet可以获取到
-->
<context-param>
<param-name>username</param-name>
<param-value>mary</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>1234</param-value>
</context-param>
init:初始化 parameter:参数
ServletContext.getInitParameter(name);
ServletContext.getInitParameterNames()
5_获取到文件的mime类型
我们每次向客户端响应的内容类型可能是不一样的.在讲解HTTP协议那天,我们通过观察网络部分,发现如果本次响应的内容类型是一个HTML网页,那么在contentType消息头中对应的值是:text/html;如果如果本次响应的内容类型是一个css文件.有时候用户会下载我们服务端的不同资源,为了让浏览器更好的识别返回到客户端的内容类型,我们要设置一下本次响应的内容类型,但问题是:计算机业界各种类型的文件是很多的,我们怎么知道应该如何设置本次响应内容类型呢?就可以通过如下的API:
String value=ServletContext.getMimeType("333.avi");
ServletContext在tomcat/conf/web.xml中,根据文件后缀来查找本次响应内容是什么.
Servlet上下文:
ServletContext相当于横跨在tomcat和我们自己写的Servlet中间的一个对象. 我们可以
在Servlet中通过ServletContext(Servlet上下文)获取到tomcat提供一些功能.
Tomcat通过识别各个ServletContext管理各个WEB应用下的Servlet