Spring MVC框架:第五章:静态资源访问与mvc:view-controller

155 阅读2分钟

静态资源访问
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没有改
在这里插入图片描述
解决导入工程后目标运行时环境错误

在这里插入图片描述