前几天在整理SSM项目的时候发现了一大堆BUG。发现都是静态资源访问惹的祸。在今晚准备睡觉的时候突然想起需要记录一下,避免以后忘记。
事发原因:在JSP中无法访问到JQuery文件。
静态无法访问的情况
由于习惯于在web.xml中将DispatcherServlet的映射路径设置为/所以遇到了很多的问题。
以下均是建立在映射为”/“的情况下。 直接说结论。如果遇到静态资源无法访问的情况
有两种解决方案
1.配置在Spring配置文件中的default servlet 加入
<mvc:default-servlet-handler/>
2.配置在Spring配置文件中的resource映射
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>
原因:
这里涉及到tomcat。 在tomcat内部,在不配置DispacherServlet的前提下,里面会有这么一项(web.xml中)
  你会发现,他这里也设置成为/ 所以如果当我们自定义一个中央处理器就会把原来的默认的处理器给覆盖掉。 而原来的处理器具备同时处理动态与静态资源的能力。 而自定义的中央处理器只具备处理动态资源的能力。 因此。在配置成/之后不能访问静态资源
解决方案1: 是通过该注解创建了一个控制器对象(涉及Spring的源码)名为:DefaultServletHttpRequestHandler 该控制器对象弥补了中央处理器对静态资源不能访问的缺陷。
解决方案2 同样也是创建了一个控制器对象,不过叫做:ResourceHttpRequestHandler 该处理器是也同样弥补了中央处理器对静态资源不能访问的缺陷,不过相比于方案一范围更可控。更广泛使用,也不依赖于tomcat服务器。
|