springmvc的核心内容是流程和组件,springmvc需要初始化IOC容器和DispatcherServlet请求两个上下文,其中后者是前者的扩展,这样才能使得spring各个Bean能够形成依赖注入。控制器是springmvc开发的核心内容,要知道如何获取请求参数,处理业务逻辑,然后将得到的数据通过视图解析器和视图渲染出来展现给客户。
ServletContext
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。
request,一个用户可有多个;session,一个用户一个;
而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的,线程安全的一些信息。多个Servlet通过ServletContext对象实现数据共享。
ServletContext context = this.getServletContext();
//存入共享的数据
context.setAttribute("name", "haha");
//获取共享的数据
String name = context.getAttribute("name");
ServletContextListener
1.java web容器围棋生命周期提供了ServletContextListener接口,他可以在web容器初始化和结束期执行一定的逻辑,通过它可以使得在DispatcherServlet初始化前就可以完成Spring Ioc容器的初始化,也可以在结束期完成对Spring IOC容器的销毁。初始化和销毁都是通过触发其参数ServletContextEvent事件来完成。springmvc将SpringIOC的初始化和销毁交给了ContextLoaderListener,它是一个实现了ServletContextListener的类。由于SpringIOC的初始化是一个比较耗时的操作,大部分场景下,都建议使用ContextLoaderListener在服务器启动期间完成SpringIoC的初始化。contextInitialized(ServletContextEvent sce)
@Override
public void contextInitialized(ServletContextEvent event) {
//通过以下方法获取ApplicationContext
ServletContext context = event.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
}
contextDestroyed(ServletContextEvent sce)
在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。
这个事件类作为Web应用服务的一部分,处理Web应用的 servlet上下文(context)的变化的通知。这可以解释为,好像有个人在服务器旁不断地通知我们服务器在发生什么事件。HttpSessionAttributeListener
attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的attributeReplaced //在Session属性被重新设置时
【推荐】在web环境中,获取ApplicationContext:
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ServletRequestListener
ServletContextListener只负责监听Web容器的启动和关闭的事件。
RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。