关于web.xml配置文件的一些问题

来源:2-6 逐层完成SSM的各项配置

罗帅

2017-11-26

<servlet>

<servlet-name>spring-dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/spring-*.xml</param-value>

</init-param>

</servlet>

这里是加载springMVC相关配置,可是我看到网上加载spring业务层和DAO层的配置文件是加了这些

<context-param>  

    <param-name>contextConfigLocation</param-name>  

    <param-value>applicationContext-*.xml</param-value>  

  </context-param>  

  <listener>  

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

  </listener>

想问这两种方式有区别吗?


写回答

1回答

罗帅

提问者

2017-11-27

我看了springmvc的源码,其实老师的方法也行,只加

<servlet>

<servlet-name>spring-dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/spring-*.xml</param-value>

</init-param>

</servlet>

而不加

<context-param>  

    <param-name>contextConfigLocation</param-name>  

    <param-value>applicationContext-*.xml</param-value>  

  </context-param>  

  <listener>  

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

  </listener>

在初始化DispatcherServlet如果顶层WebApplicationContext还没被创建,就会创建一个。

不过业界普遍做法是

将除web层的配置交由ContextLoaderListener加载得到顶层父容器RootWebApplication,

而web层的组件交由DispatcherServlet初始化完成,得到特定于DispatcherServlet的

WebApplicationContext,并与父容器RootWebApplication关联。

这样做的好处是:

因为在web容器中,Listener先于Servlet执行,故底层的Dao和Service层的bean组件先构建完成,再构建web层组件,自底向上,分层清晰,职责明确。

以官方文档中的图来说明:

//img.mukewang.com/szimg/5a1bb3d400011ef806740459.jpg

不知这样分析对不对?

1
1
翔仔
同学好,当时写这个项目用来创业的时候直接就在Web.xml里面配置成这样的,确实没有去考虑这方面的事情,感谢同学提醒,等我外出回来一定会仔细调研一下,并给同学回复,非常感谢同学能够一个个知识点去深入,我也受益匪浅,谢谢同学:)
2017-11-27
共1条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程