背景:因为在设置前端控制器DispatcherServlet时,将请求地址设置为/,这将导致静态资源无法访问,所以都会在springMVC的配置文件中设置放行静态资源:
<!--静态资源处理-->
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/fonts/**" location="/fonts/"/>
<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:resources mapping="/pages/**" location="/pages/"/>
问题重现:项目所有的配置文件都设置好后,启动Tomcat 服务器,通过地址来访问服务器中的静态页面,出现无法访问的问题,同时控制台输出:
页面显示:
解决方案:由于是静态资源的访问失败,出现错误定位在springMVC的配置文件上,但当对springMVC内容进行更改时,出现的问题还是一样,再加上编译生成的文件夹target中没有加载出resources中的文件:
所以断定问题出在资源文件在加载的时候没有被扫描注册到,需要在pom.xml文件中设置资源的扫描位置:
<!--扫描resources包中的资源文件-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
添加完之后,删除之前编译生成target文件夹,重新启动Tomcat服务器之后就可以加载springMVC的配置文件,并能够访问静态页面了。
补充:classpath和classpath*区别,这虽然是这是一个小的知识点,但在实际项目运行时会带来不小的麻烦。
例如:在web.xml中读取springMVC配置文件时就会使用classpath:
但这容易导致项目启动时不能及时加载该文件使用文件中的配置不能生效,应该将classpath改为classpath*,再清理一下编译文件就可以实现加载:
总结:classpath和classpath*区别: classpath:只会到你的class路径中查找找文件。 classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找