在Tomcat中,如果不设置其他Servlet,当我们访问静态资源时,路径会被 DefaultServlet
拦截,并在根目录下寻找。
在引入SpringMVC之后,我们给DispatcherServlet设置路径为/
覆盖了默认的DefaultServlet
导致无法解析静态资源的路径。为了解决这个问题,我总结了一下几种方式。
1. Controller中手动设置静态资源(不推荐)
@RequestMapping("/index.html")
public String index(){
return "index";
}
根据返回的index找到index.html
访问路径:http://localhost:8080/springmvc/index.html
Spring根据Contoller返回的字符串,结合设置的视图解析器,添加上前缀后缀,找到index.html。这种方法虽然可以实现访问静态资源,显然不实用。当我们访问其他后缀的文件呢,为每个静态文件创建控制器Controller太麻烦了。
2.设置 view-controller (不推荐)
在SpringMVC.xml配置文件中设置
<mvc:view-controller path="/index" view-name="index"/>
相当于设置了1 中手动设置了一个Controller控制器@RequestMapping(“/index”) ,方法返回值为index。
注意设置view-controller之后,Controller类中的所有控制器方法将失效,需要在配置文件中设置
<mvc:annotation-driven/>
开启注解驱动,恢复Controller。
但是这种方法无非是简化了Controller的代码,还是不实用
3.设置<mvc:default-servlet-handler/>
(推荐)
在springMVC.xml中设置<mvc:default-servlet-handler/>
之后,DispatcherServlet处理不了的请求会交给DefaultServlet处理,DefaultServlet可以帮助我们访问静态资源。
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
设置
<mvc:default-servlet-handler/>
之后,所有的Controller控制器也会失效,需要添加<mvc:annotation-driven/>
配置,开启注解驱动。
在根目录下添加index.html文件
直接访问静态资源