这篇文章主要为大家展示了“springMVC web.xml中配置加载顺序是怎么样的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springMVC web.xml中配置加载顺序是怎么样的”这篇文章吧。
在这里就不详细说web.xml的文件中的具体配置,就简单说明一下其中配置信息的加载顺序:
在web.xml文件中元素的加载顺序与它们在 web.xml 文件中的先后顺序无关。
加载的顺序是:context-param->listener -> filter -> servlet ,其中context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,然而对于某些配置节而言,它们出现的顺序是有先后关联的。
这里在补充一下在配置中遇到的一下问题以及解决方式:
在web.xml中定义的spring的配置文件一般有两个
applicationContext.xml
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param>
spring-servlet.xml
<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
首先加载Spring上下文环境配置文件,然后加载SpringMVC配置文件,并且如果配置了相同的内容,SpringMVC配置文件会被优先使用。 所以这里需要注意一个问题,一定要注意SpringMVC配置文件内容不要把Spring上下文环境配置文件内容覆盖掉。
比如在Spring上下文环境配置文件中先引入service层,然后又加入了事务:
<context:component-scan base-package="com.acms.service"></context:component-scan> <!-- define the transaction manager --> <bean id="transactionManagerOracle" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceOracle" /> </bean> <tx:annotation-driven transaction-manager="transactionManagerOracle" />
但是在SpringMVC配置文件中却默认引入所有类(当然也包括service层),但是没有加入事务
<context:component-scan base-package="com.acms"></context:component-scan>
那么这时事务功能是无法起作用的,也就是代码中加入@Transactional注解是无效的。所以为了防止这种问题一般是在Spring上下文配置文件中引入所有的类,并且加上事务:
<context:component-scan base-package="com.acms"></context:component-scan> <!-- define the transaction manager --> <bean id="transactionManagerOracle" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceOracle" /> </bean> <tx:annotation-driven transaction-manager="transactionManagerOracle" />
而在SpringMVC配置文件中只引入controller层:
<context:component-scan base-package="com.acms.controller" /> <context:component-scan base-package="com.acms.*.controller" />
web.xml文件中,我们一般会配置一些工程启动时需加载的配置文件.比如:SpringMVC工程开发时,
我们一般是会有两个xml的配置文件。一个上下文配置文件applicationContext.xml,另一个就是springMVC的配置文件servlet-context.xml文件.
加载顺序:
1. 服务器启动时,首先会找web.xml文件,加载web.xml文件中配置文件;
2.找到 web.xml后,首先加载上下文配置文件;也就是<context-param></context- param>标签中初始化文件.其可用通配符的方式指定路径加载多个文件;比如:application*.xml.
3.加载监听器;<listener>...</listener>
4.加载过滤器;<filter>...</filter>
5.加载Servlet;<servlet></servlet>。比如SpringMVC的配置文件servlet-context.xml。
@Service,@Controller包文件扫描时配置注意事项:
1. 当我们在applicationContext.xml中添加了Spring的事务配置,而在servlet-context.xml中添加扫描@service包路径
<context:component-scan base-package="**.*.service" />时,则当我们在Service中方法添加事务注解时,会发现事务没有起作用.而把<context:component-scan base-package="**.*.service" />放在和事务配置的同一个xml配置文件时,就可以了.总的来说就是Service层要在Controller层先被扫描.
2. 当在applicationContext.xml文件中添加了扫描Service包的路径<context:component-scan base-package="com.cn.service.*" />时,又同时在servlet-context.xml文件中添加扫描<context:component-scan base-package="com.cn.*" />时,Spring事务也不会起作用。因为SpringMVC中配置文件中配置会覆盖applicationContext.xml中内容.
以上是“springMVC web.xml中配置加载顺序是怎么样的”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。