SpringMVC学习总结(四)——静态资源的访问

来源:互联网 发布:免费选股软件 编辑:程序博客网 时间:2024/06/02 02:07

一:常规配置

如果使用SpringMVC框架,那么在web.xml文件中配置关于spring的dispatcherServlet类就是必不可少的一段配置,配置如下:

<!-- springmvc的前端控制器 --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

可以看到,在servlet-mapping元素的url,模式设置为“/”,这意味着所有请求(包括那些静态资源)都被映射到dispatcher servlet中。为了正确处理静态资源,需要在springmvc 的配置文件添加一些配置,如下:

<!-- 资源映射  静态资源的访问配置(WEB-INF路径下不可自己访问) --><mvc:resources location="/WEB-INF/css/" mapping="/css/**"/><mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
       或者添加如下代码:效果等同:

        <!-- 静态资源由web服务器默认的servlet处理 -->         <mvc:default-servlet-handler/>

        当我们再次运行项目,然后url访问controller中的requestMapping("/tolist")时却不能访问了,之前没有添加静态资源访问的配置时,访问是没有问题的,可是现在为什么不行了呢?再在springMVC的配置文件添加如下配置:

<!-- 注解驱动 --><mvc:annotation-driven />
现在问题解决!

二:问题分析

          我们分以下情况分别分析:

        1·没有配置<mvc:default-servlet-hander/>,也没有配置<mvc:annotation-driven>,浏览器访问资源,看请求参数:



         2· 配置<mvc:default-servlet-hander/>,没有配置<mvc:annotation-driven>,浏览器访问资源,看请求参数:


       3· 配置<mvc:default-servlet-hander/>,也配置<mvc:annotation-driven>,浏览器访问资源,看请求参数:



          当两种标签都没有的时候,框架默认注册的有AnnotationMethodHandlerAdapter这个bean,所以能够处理@requestMapping注解,但是如果只是配置了<mvc:default-servlet-handler/>时所注册的三个bean都不能处理@RequestMapping注解,因此无法找到相应的controller,进而无法进行访问路径的映射;当两种标签都有的时候,<mvc:annotation-driven/>会注册一个requestMappingHandlerAdapter的bean,这个bean能够处理@RequestMapping这个注解。


注意:

        根据以上的总结分析,我们得出一个结论:如果在springMVC的配置文件中有<mvc:resource/>的静态资源访问配置,那么必须要添加<annotation-driven/>的注解;若不需要使用resource,则不需要<annotation-driven/>元素。


0 0
原创粉丝点击