在struts2整合spring的时候,完全一步步按照官方文档上去做的,最后发现出现 Unable to instantiate Action,网上一搜发现很多人和我一样的问题,配置什么都没有错误,就是出现这个问题,其实这个原因很简单就是Spring容器没有启动,struts2容器到spring容器里面找Action的时候当然就找不到了。
问题就出在web.xml配置的问题,按照struts2官方文档上面步骤,在web.xml里面配置加入以下代码:
<!-- Context Configuration locations for Spring XML files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
问题就出在这里。我们知道struts2整合spring的时候, spring配置文件会默认为 /WEB-INF/applicationContext.xml 。但时如果我们加上上面的配置,当启动Spring容器的时候,它就会去 【/WEB-INF/】或者【/WEB-INF/classes/及其子目录(也就是classpath*)】下面查找以名字以 applicationContext-(注意有一个[-]) 为开头的spring配置文件。但是我们一般习惯性的将spring的配置文件起名为 applicatinContext.xml,所以是永远也加载不了这个文件啦。或者是没有加上如上的配置但是我们把spring配置文件放在类加载路径下,也无法加载了。
所以我们只要把【-】去掉就可以了
<!-- Context Configuration locations for Spring XML files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml,classpath*:applicationContext*.xml</param-value>
</context-param>
就一切正常啦。