根本原因:
tomcat本身是能处理静态资源的访问比如html,图片,js文件等,tomcat的web.xml文件中有一个servlet,名称是 default 作用是能够处理静态资源,以及处理那些未被映射到其他servlet的请求,default的< url-pattern >就是 /,即所有请求。
当我们的DispatcherServlet的< url-pattern >也设置为 / 的时候,默认优先级会比default的优先级更高, 所以请求会给DispatcherServlet , 但是我们并没有一个控制器中有处理这些静态资源的方法,自然就无法访问到.
首先在webapps下专门建立一个文件夹static用于存放静态资源:
解决方法:
方法1:
在SpringMVC的配置文件中加上标签:
< mvc:default-servlet-handler/>
< mvc:annotation-driven/ >
原理是:加上< mvc:default-servlet-handler/>标签后,框架会创建控制器对象DefaultServletHttpRequestHandler就类似于我们自己创建的 controller对象,这个对象可以把收到的请求转发给tomcat的default来处理.
注意:同时也必须加上注解驱动,因为如果不加,会影响@RequestMapping的映射使用!!
方法2:
在Spring3.0后,Spring中有专门处理静态资源的处理方式,同样在SpringMVC配置文件中加入以下标签:
< mvc:annotation-driven >
< mvc: resources mapping=“/static/**” location=“/statics/” />
解释:
1)必须加上注解驱动,同样如果不加,会影响@RequestMapping的映射使用
2)是用于指定请求静态资源的url和资源存在于本地的映射关系.
参数:
mapping: 用于指定请求路径 比如mapping=“/static/**” ,**表示可以匹配任意以/static为开头的url请求.
location: 用于指定映射到本地静态资源的路径,比如我的静态资源文件全部放在webapps/static/目录下,比如webapps/static/image/1.jpg ,则我的location可以写成location=“/static/”
当我的请求url中包含/static/的时候就会自动映射到本地/static/中去找