SpringMVC理解之一:应用上下文webApplicationContext
来源:互联网 发布:ne555数据手册 编辑:程序博客网 时间:2024/06/05 08:00
一、先说ServletContext
javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。
举例:
通过自定义contextListener获取web.xml中配置的参数 1.容器启动时,找到配置文件中的context-param作为键值对放到ServletContext中 2.然后找到listener,容器调用它的contextInitialized(ServletContextEvent event)方法,执行其中的操作 例如:在web.xml中配置1.
<context-param>
2.
<param-name>key</param-name>
3.
<param-value>value123</param-value>
4.
</context-param>
5.
<listener>
6.
<listener-
class
>com.brolanda.contextlistener.listener.ContextListenerTest</listener-
class
>
7.
</listener>
01.
package
com.brolanda.contextlistener.listener;
02.
03.
import
javax.servlet.ServletContext;
04.
import
javax.servlet.ServletContextEvent;
05.
import
javax.servlet.ServletContextListener;
06.
07.
public
class
ContextListenerTest
implements
ServletContextListener {
08.
09.
public
void
contextDestroyed(ServletContextEvent event) {
10.
System.out.println(
'*************destroy ContextListener*************'
);
11.
}
12.
13.
@SuppressWarnings
(
'unused'
)
14.
public
void
contextInitialized(ServletContextEvent event) {
15.
System.out.println(
'*************init ContextListener*************'
);
16.
ServletContext servletContext = event.getServletContext();
17.
System.out.println(
'key:'
+servletContext.getInitParameter(
'key'
));
18.
}
19.
20.
}
执行流程:
web.xml在<context-param></context-param>标签中声明应用范围内的初始化参数
1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.
4.容器创建<listener></listener>中的类实例,即创建监听.该监听器必须实现自ServletContextListener接口5.在监听中会有contextInitialized(ServletContextEvent event)初始化方法
在这个方法中获得ServletContext = ServletContextEvent.getServletContext();“context-param的值” = ServletContext.getInitParameter('context-param的键');
二、spring上下文容器配置
spring为我们提供了实现ServletContextListener接口的上下文初始化监听器:org.springframework.web.context.ContextLoaderListener
spring为我们提供的IOC容器,需要我们指定容器的配置文件,然后由该监听器初始化并创建该容器。要求你指定配置文件的地址及文件名称,一定要使用:contextConfigLocation作为参数名称 如下所示:
该监听器,默认读取/WEB-INF/下的applicationContext.xml文件。但是通过context-param指定配置文件路径后,便会去你指定的路径下读取对应的配置文件,并进行初始化。
三、spring上下文容器配置后,初始化了什么?
既然,ServletContext是由Servlet容器初始化的,那spring的ContextLoaderListener又做了什么初始化呢?
1、servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext四、spring配置时:<context:exclude-filter>的使用原因即为什么在applicationContext.xml中排除controller,而在spring-mvc.xml中incloud这个controller
既然知道了spring的启动流程,那么web容器初始化webApplicationContext时作为公共的上下文环境,只需要将service、dao等的配置信息在这里加载,而servlet自己的上下文环境信息不需要加载。故,在applicationContext.xml中将@Controller注释的组件排除在外,而在dispatcherServlet加载的配置文件中将@Controller注释的组件加载进来,方便dispatcherServlet进行控制和查找。故,配置如下:<!-- 使用Annotation自动注册Bean:在主容器中不扫描@Controller注解,在SpringMvc子容器中只扫描@Controller注解。 --><context:component-scan base-package="com.zsq.cn"><!-- base-package如果多个,用“,”分隔 --><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller" /></context:component-scan>
<!-- 使用Annotation自动注册Bean,只扫描@Controller --><context:component-scan base-package="com.zsq.cn" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 这里一定要设置use-default-filters="false" 不让容器去自动扫描@Component,@Service等注解--><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller" /></context:component-scan>
- SpringMVC理解之一:应用上下文webApplicationContext
- SpringMVC理解之一:应用上下文webApplicationContext
- SpringMVC理解之一:应用上下文webApplicationContext
- SpringMVC理解之一:应用上下文webApplicationContext
- Spring-MVC理解之一:应用上下文webApplicationContext
- Spring-MVC理解之一:应用上下文webApplicationContext
- springmvc执行流程以及对spring应用上下文webApplicationContext理解
- SpringMVC 上下文webApplicationContext
- SpringMVC 上下文webApplicationContext
- SpringMvc教程(五)--父子上下文(WebApplicationContext)
- springMVC(二),每天学习一点点~~~~~WebApplicationContext(父子上下文)
- SpringMVC的应用上下文管理
- 对SpringMVC上下文容器配置的理解
- Spring3 MVC 父子上下文(WebApplicationContExt)讲解
- SpringMVC加载webapplicationcontext代码分析
- SpringMVC加载WebApplicationContext源码分析
- SpringMVC加载WebApplicationContext源码分析
- springmvc 加载WebApplicationContext源码分析
- base64编码以及url safe base64是怎么工作的?
- ACM数论之旅6---数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄))
- JavaScript基础之koa入门
- C++中如何将char类型转换为String 类型
- maven工程clean之后乱码问题
- SpringMVC理解之一:应用上下文webApplicationContext
- 合并两个list集合并且排序
- nmon系统监控 for linux
- c++之单例模式
- Leetcode之Max Consecutive Ones 问题
- Mac开发 调用浏览器打开网页
- [unity] OnGUI
- Golang学习之net包介绍
- CAD转pdf怎么设置页面大小