ServletContext
javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。
举例:通过自定义ContextListener获取web.xml中配置的参数
- 容器启动时,找到配置文件中的context-param作为键值对放到ServletContext中
- 然后找到listener,容器调用它的contextInitialized(ServletContextEvent event)方法,执行其中的操作 例如:在web.xml中配置
<context-param> <param-name>key</param-name> <param-value>value123</param-value> </context-param> <listener> <listener-class>com.yyds.contextlistener.listener.ContextListenerTest</listener-class> </listener>
配置好之后,在该类中获取对应的参数信息:
public class ContextListenerTest implements ServletContextListener { public void contextDestroyed(ServletContextEvent event) { System.out.println(‘*************destroy ContextListener*************‘); } @SuppressWarnings(‘unused‘) public void contextInitialized(ServletContextEvent event) { System.out.println(‘*************init ContextListener*************‘); ServletContext servletContext = event.getServletContext(); System.out.println(‘key:‘+servletContext.getInitParameter(‘key‘)); } }
执行流程:
(1) web.xml在<context-param></context-param>标签中声明应用范围内的初始化参数
(2) 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml。读两个节点: <listener></listener> 和 <context-param></context-param>
(3) 紧接着,容器创建一个ServletContext(上下文)。在该应用内全局共享。
(4) 容器将<context-param></context-param>转化为键值对,并交给ServletContext。
(5) 容器创建<listener></listener>中的类实例,即创建监听。该监听器必须实现自ServletContextListener接口
(6) 在监听中会有contextInitialized(ServletContextEvent event)初始化方法
在这个方法中获得ServletContext = ServletContextEvent.getServletContext();
“context-param的值” = ServletContext.getInitParameter(‘context-param的键‘);
(7) 得到这个context-param的值之后,你就可以做一些操作了。注意,这个时候你的WEB项目还没有完全启动完成,这个动作会比所有的Servlet都要早。换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行。
web.xml中可以定义两种参数:
一个是全局参数(ServletContext),通过<context-param></context-param>
一个是servlet参数,通过在servlet中声明:
<init-param> <param-name>param1</param-name> <param-value>avalible in servlet init()</param-value> </init-param>
第一种参数在servlet里面可以通过getServletContext().getInitParameter(‘context/param‘)得到。
第二种参数只能在servlet的init()方法中通过this.getInitParameter(‘param1‘)取得。
Spring上下文
SpringMVC上下文