spring mvc web.xml配置context加载

以Tomcat为例,想在Web容器中使用Spirng MVC,必须进行四项的配置:
修改web.xml,添加servlet定义、编写servletname-servlet.xml( servletname是在web.xm中配置DispactherServlet时使servlet-name的值) 、配置contextConfigLocation初始化参数、配置ContextLoaderListerner。

<!-- servlet定义 -->
<servlet>
<servlet-name>vincent</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>vincent</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


<!-- 配置contextConfigLocation初始化参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/vincent-service.xml,/WEB-INF/vincent- dao.xml</param-value>
</context-param>

<!-- 配置ContextLoaderListerner -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
[color=red]DispatcherServlet:[/color]前端处理器,接受的HTTP请求和转发请求的类。

[color=red]vincent-servlet.xml:[/color]定义DispatcherServlet中WebAppliactionContext上下文中的bean。

[color=red]contextConfigLocation[/color]:指定Spring IoC容器需要读取的定义了非web层的Bean(DAO/Service)的XML文件路径。使用 contextConfigLocation 加载指定路径的配置文件时,多个配置文件可以用逗号,冒号,空格, \t,\n 中任一个来分隔。
如果没有指定contextConfigLocation 参数,ContextLoaderListener会默认加载/WEB-INF/applicationContext.xml这个配置文件。springmvc将由ContextLoaderListener 载入的application context 叫做 "root application context" ,以区别于servlet的application context。

springmvc可以配置多个servlet,每一个 servlet都拥有各自的application context,相互之间不能相互访问。但是"root application context"却是对所有servlet都是可见的。


[color=red]ContextLoaderListener:[/color]Spring MVC在Web容器中的启动类,负责Spring IoC容器在Web上下文中的初始化。

根据前面的配置,DispatcherServlet已经载入court-servlet.xml。你可以将系统中所有的bean都配置在court-servlet.xml中,但是最后这个文件会非常臃肿,最佳实践是对每一层(web、biz、dal)进行单独配置,至少要区分web层配置和biz层的配置。
最后,该servlet application context将root application context设置为parent,然后加载完成。

Spring MVC启动过程大致分为两个过程:1、ContextLoaderListener初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。2、DispatcherServlet初始化。

[color=indigo]DispatcherServlet初始化配置如下:
servlet application context的加载策略类似于root application context,首先会查找是否配置了servlet的init-param "contextConfigLocation",如果有,就使用 contextConfigLocation 指定的路径加载的配置文件时,多个配置文件可以用逗号,冒号,空格, \t,\n 中任一个来分隔。


为了保证所有的配置文件都可以被载入,我们需要在web.xml文件中配置一个上下文载入器。
如果没有指定"contextConfigLocation"参数,则会在 /WEB-INF/下查找 "servlet-name"+"-servlet.xml" 这样的文件加载。如下配置所示,就是/WEB-INF/springDispatcherServlet-servlet.xml 。
Xml代码
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/servlet-applicationContext.xml,WEB-INF/service-applicationContext.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/mvc/*</url-pattern>
</servlet-mapping>


以后在应用里调用applicationContext或者beanFactory的getBean方法去获取实例的时候,都是先尝试从"root application context"获取,获取不到,再到当前application context里获取。
[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值