请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

<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>

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


正在回答 回答被采纳积分+3

1回答

提问者 罗帅 2017-11-27 13:45:13

我看了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层组件,自底向上,分层清晰,职责明确。

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

https://img1.sycdn.imooc.com//szimg/5a1bb3d400011ef806740459.jpg

不知这样分析对不对?

1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    同学好,当时写这个项目用来创业的时候直接就在Web.xml里面配置成这样的,确实没有去考虑这方面的事情,感谢同学提醒,等我外出回来一定会仔细调研一下,并给同学回复,非常感谢同学能够一个个知识点去深入,我也受益匪浅,谢谢同学:)
    回复 有任何疑惑可以回复我~ 2017-11-27 19:28:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信