web容器在启动时,它会为web程序都创建一个servletContext对象,代表当前的web应用
(面向对象的思想,一个对象代表一个应用,比如一个对象代表老师,就会有讲课的方法)
一个web应用指的就是tomcat文件夹下webapps下的每一个文件夹,即对应每一个web程序
由于一个web应用中所有的Servlet共享同一个ServletContext对象,所以多个Servlet通过servletContext对象实现数据共享
servletContext对象通常也被称之为Context域对象。
servletContext域说明两个问题
1. 这是一个容器
2. servletContext域说明这个容器的作用范围,是整个应用程序。
获取servletcontext对象的两种方式
- ServletConfig对象里维护了一个ServletContext对象,可以直接通过ServletConfig.ServletContext获取
- 也可以在Servlet类中使用this.ServletContext获取
1. 多个Servlet之间实现数据共享
实际web开发中,适用于聊天室
两个Servlet之间传递数据、
Servlet1:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String dataString = "aaa"; this.getServletContext().setAttribute("data",dataString); }
Servlet2:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String valueString = (String) this.getServletContext().getAttribute("data"); }
这样的话需要先执行Servlet1然后再执行Servlet2
2. 获取web应用的初始化参数
<context-param> <param-name>data</param-name> <param-value>xxxx</param-value> </context-param>
前面都是为某个特定的Servlet配置初始化参数,这里是为整个web应用配置初始化参数。
这时候,只要web服务器一加载web应用,就会创建代表web应用的ServletContext对象,对象创造出来之后,会自动把配置的初始化参数封装到servletContext对象中去。然后在程序中只需要去取就行了。
实际开发中,比如连接数据库
3. 实现Servlet的转发
当客户端向某一个Servlet请求时,Servlet要返回数据,但是Servlet不适合做输出(因为对文字的渲染很麻烦),它会把数据交给jsp文件,由jsp来做输出
这个过程就是转发
Servlet把数据传递给jsp,可以通过servletContext域,但是这种方式不安全,会涉及到线程安全问题
一般是通过Request域
4. 利用servletContext对象读取资源文件
1. 得到文件路径
2. 读取资源文件的三种方式
3. .propertities文件(属性文件)
servletContext生命周期
服务器启动的时候,就会为服务器中的每一个web应用创建一个servletContext
可以在路径C: omcatwebapps下看出这个服务器下有多少个web应用
服务器停掉的时候,对象消失。