web上下文、spring上下文、springmvc上下文

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上下文

 

web上下文、spring上下文、springmvc上下文

上一篇:MFC实现简易学生成绩管理系统


下一篇:最简洁学完Spring框架