静态资源访问
1.提出静态资源问题
Web项目的开发不可避免的要使用静态资源。在我们的项目中图片文件、音视频文件、CSS文件、JavaScript文件、HTML文件等等凡是浏览器直接可以使用且不需要Tomcat解析的资源都是静态资源。
那么静态资源在SpringMVC中有什么问题呢?
如果在web.xml中我们配置ulr-pattern为“/”,那么访问静态资源时会返回404。
原因是参照<url-pattern>/</url-pattern>这个配置SpringMVC对所有“/”下的资源都进行匹配,而a.jpg我们又没有任何一个@RequestMapping和它对应,所以SpringMVC认为并不存在这个资源。
2.解决办法
①解决办法1
url-pattern映射*.扩展名
在ulr-pattern配置扩展名,例如:<url-pattern>*.mvc</url-pattern>
<!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>*.mvc</url-pattern> </servlet-mapping>
这样配置之后会有一个重要的、严格的限制:所有希望由SpringMVC来处理的请求,末尾都必须加上指定的扩展名,比如我们这个例子中的*.mvc。反之没有以*.mvc结尾的请求都和SpringMVC无关,还是由Tomcat处理。
②解决办法2
还是保持/的配置,然后在Spring配置文件中加入如下配置:
<mvc:default-servlet-handler/> <mvc:annotation-driven/>
这个方法内部没有做任何处理,仅仅是把一个URL地址"/direct"映射到视图"result"。那么有没有办法简化一下呢?使用mvc:view-controller配置即可。
//
<mvc:view-controller path="/direct" view-name="result"/> <mvc:annotation-driven/>
mvc:view-controller也必须搭配mvc:annotation-driven。
<a href="${pageContext.request.contextPath }/direct">测试ViewController</a>
解决多个Web工程contextPath名重复问题,我们复制之前的项目Context root没有改
解决导入工程后目标运行时环境错误