这几天自己使用Maven配置SpringMVC+Shiro,碰到两个问题。都耗费了我几个小时的时间,而且最后发现都属于配置上的细节问题。在这里记录下来。
1.找不到Action。
情况:使用注解配置Controller,并且在对应的方法上也写了@RequestMapping,并且mvc配置文件里有配置<mvc:annotation-driven/>和<context:component-scan>两个标签。怎么都找不到。
问题还是在<context:component-scan>这个标签上。
因为是在学习Shiro,所以springmvc的配置文件是直接从张开涛的Shiro项目中拷贝过来的。他的配置文件是这样的:
<context:component-scan base-package="com.yrsoft" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
而我在使用的时候把中间的两个注释掉了。变成了
<context:component-scan base-package="com.yrsoft" use-default-filter="false">
</context:component-scan>
找问题的时候突然觉得这个use-default-filters很可疑,去掉这个属性之后果然就可以了。或者写成如下的形式,或者第一种形式。总之第二种形式是错误的。
<context:component-scan base-package="com.yrsoft" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
根据结果来看,我注释掉的两行应该是配置spring扫描固定的注解的,猜测这样应该会提高一些效率。具体提升多少这里不做研究。
2.找不到静态资源。
情况:使用maven构建了项目,在webapp下创建了resource文件夹,并且里面放了jquery.js和test.jsp。结果jsp文件能访问,使用jquery文件的页面加载JQ的时候总是报404.
刚开始以为是maven或者Shiro配置问题。后来搜索了半天,发现还是MVC的配置问题。
在mvc的配置文件里加上:
<mvc:resources location="/resource/" mapping="/resource/**"/>
这样就可以了。
不明白为什么静态资源就一定要写这个配置。不知道是出于什么考虑。