静态资源访问
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/>
单独使用mvc:default-servlet-handler是不行的,必须配合mvc:annotation-driven。原因我们在SpringMVC原理中介绍。
小结:
前提web.xml中url-pattern还是映射“/”
SpringMVC配置文件中配置:<mvc:default-servlet-handler/>保证静态资源可以访问
SpringMVC配置文件中配置:<mvc:annotation-driven/> 常规请求可以访问
介绍<mvc:default-servlet-handler/>作用
SpringMVC处理请求的步骤概括来说就是SpringMVC能处理就处理,处理不了交给Tomcat。
介绍<mvc:annotation-driven/>作用
SpringMVC的标配,在实际开发时建议每次都把这个配置加上。因为加上这个配置后,SpringMVC会在IOC容器中加入很多用得到的bean。例如:@ResponseBody、文件上传、类型转换等等功能都需要用到。
第八节 mvc:view-controller
假设有下面这样一个handler方法:
@RequestMapping("/direct")
public String direct() {
return "result";
}
这个方法内部没有做任何处理,仅仅是把一个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没有改
解决导入工程后目标运行时环境错误