首先要明确的是不是任何时候都要配置静态资源的访问的,只有当自定义的中央调度器的servlet的url-pattern映射范围为 / 时,才要配置,使用了映射范围 / ,后,就不需要将controller方法指定为什么*.do等带后缀的url了。
当自定义一个servlet后,在里边设置中央调度器后,之前的中央调度器所在的servlet的映射范围为:*.do,默认只处理.do结尾的请求。
而我们知道,Tomcat服务器自身也有servlet,用于处理静态资源,如html、js、css、图片等。但如果将中央调度器所在的servlet的映射范围改为 / ,则自定义的这个中央调度器的servlet会覆盖Tomcat服务器的映射范围,导致所有静态资源也由自定义的servlet来处理,而自定义的servlet没有处理静态资源的能力,则会报404找不到资源。
针对将自定义的servlet的url-pattern映射范围改为 / 后,处理静态资源的问题出错,有如下解决方案(2常用):
方式1:使用< mvc:default-servlet-handler/>(了解)
这种方式的缺点是任然依赖Tomcat服务器处理静态资源
<!-- 方式1-->
<!-- 这种方法配合web.xml中的自定义servlet映射范围为 / 的情况,类似于框架创建了一个对象,这个对象可以将自定义的servlet不能处理的资源转发给了Tomcat的servlet进行处理-->
<mvc:default-servlet-handler />
方式2:使用< mvc:resources/>(掌握)
这种方式可以不依赖服务器的servlet处理静态资源!
将所有静态资源放在static目录下:
在springmvc.xml中配置:
<!-- 方式2-->
<!-- 不依赖Tomcat的servlet处理静态资源,框架自身创建对象进行处理,下面既包含了创建对象,也包含了指定待处理的静态资源的位置-->
<mvc:resources mapping="/static/**" location="/static/" />