静态资源访问 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>
代码语言:javascript复制<!-- 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配置文件中加入如下配置:
代码语言:javascript复制<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方法:
代码语言:javascript复制@RequestMapping("/direct")
public String direct() {
return "result";
}
这个方法内部没有做任何处理,仅仅是把一个URL地址"/direct"映射到视图"result"。那么有没有办法简化一下呢?使用mvc:view-controller配置即可。
代码语言:javascript复制<mvc:view-controller path="/direct" view-name="result"/>
<mvc:annotation-driven/>
mvc:view-controller也必须搭配mvc:annotation-driven。
代码语言:javascript复制<a href="${pageContext.request.contextPath }/direct">测试ViewController</a>
解决多个Web工程contextPath名重复问题,我们复制之前的项目Context root没有改
解决导入工程后目标运行时环境错误