1、若将 DispatcherServlet 请求映射配置为/,则Spring MVC将捕获 WEB 容器的所有请求,包括静态资源的请求,SpringMVC当成一个普通请求处理,所以会找不到对应处理器而导致错误。
提供以下三种方式处理外界对WebRoot下静态资源的请求
(1)在SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/> 的方式解决静态资源的问题,<mvc:default-servlet-handler/> 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,
如果发现是没有经过映射的请求,就将该请求交由 WEB应用服务器默认的 Servlet 处理,
如果不是静态资源的请求,才由 DispatcherServlet 继续处理。
在springmvcxml中增加一行配置:
<!-- 处理静态资源1 可以直接访问WebRoot下除WEB-INF外的所有静态资源-->
<!-- 访问方式(static文件夹在WebRoot下和WEB-INF同级):
http://localhost:8080/Springmvc3/static/1122.jpg -->
<mvc:default-servlet-handler/>
(2)/static/** 映射到 ResourceHttpRequestHandler 进行处理,location 指定静态资源的位置,可以是 web application 根目录下、jar 包里面。(。。访问WEB-INF中的)
<!-- 处理静态资源2 **表示目录下的所有,或者是目录与子目录下的所有-->
<mvc:resources mapping="/static/css/**" location="/static/css/" />
<mvc:resources mapping="/static/images/**" location="/static/images/" />
<mvc:resources mapping="/static/js/**" location="/static/js/" />
<!-- 访问方式:http://localhost:8080/Springmvc3/static/1122.jpg-->
<mvc:resources mapping="/views/**" location="/WEB-INF/views/" />
<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
(3)
一般 WEB 应用服务器默认的 Servlet 的名称都是 default.若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 web.xml 属性显式指定。
由 servlet 处理这些资源是一定了。不过,不同的 servlet 容器/应用服务器,处理这些静态资源的 servlet 的名字不大一样:
Tomcat, Jetty, JBoss, and GlassFish:默认 Servlet 名字为 "default"
Google App Engine:默认 Servlet 名字为 "_ah_default"
Resin:默认 Servlet 名字为 "resin-file"
WebLogic:默认 Servlet 名字为 "FileServlet"
WebSphere:默认 Servlet 名字为 "SimpleFileServlet"
在web.xml配置文件中加入配置:
<!-- 处理静态资源3 -->
<!-- 访问方式: http://localhost:8080/Springmvc3/static/1122.jpg -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>