朋友昨天做了一个新的项目,用sring boot+maven聚合项目在web子项目中引用html和.js文件时前台一直报404错误。
用到了thymeleaf模板,项目配置文件用的是spring boot 支持的.yml为后缀文件做配置,这里没有做对js或者img或者jsp下的过滤/拦截。下面是项目目录结构
yxt 项目 静态资源文件我是放在 src/main/resources/static/js/xx.js
项目启动: localhost:8080 直接会访问 templates下的index.html页面,但是index的js没有找到static下的jquery.js文件
我当时的理解是spring boot 没有对当前需要引用的静态资源文件做配置(拦截/过滤) ,一般SringMvc框架对静态资源文件的访问是在它的spring-mvc.xml文件中通过 mvc:resources 标签对每一个需要访问的静态文件/图片 进行拦截
springMvc引用静态资源处理方法:
<mvc:resources mapping="/js/**" location="/WEB-INF/views/js/" />
<mvc:resources mapping="/jsp/**" location="/WEB-INF/views/jspOrhtml/" />
而我当前spring boot项目引用的是yml文件 ,百度了一下yml的语法
spring boot 中以.yml为后缀访问静态资源文件的处理方法
resources:
static-locations:["/templates/","/static/"]
意思是访问src/main/resources/static 或者 templates下的文件(静态资源或html、jsp)
如果是application.properties 则解决方法是
spring.mvc.static-path-pattern=/static/**
意思是访问static下的静态资源文件
添加好后项目能够正常引用其他静态文件了,我按照这种方式去对另一个项目进行静态资源文件的访问发现依然报404 之后我对照了访问静态文件的路径、配置,以及html中引用的地方,发现依然是访问不了。
之后我打印两个项目启动时的日志文件用beyond compare对比工具:
2018-05-11 23:09:52.391 INFO 8512 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-11 23:09:52.391 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
以上是访问不了js、css等静态资源文件的项目启动打印日志多出来的内容,大概意思是hiddenHttpMethodFilter过滤器没有找到/*下的文件,可能是后台某个配置文件没有配置又或者是映射不到相应的内容,
我查看了.yml的配置文件,发现两个项目除了server 端口号不一样意外,两个spring boot的项目配置基本一样,所以我排除了配置文件的问题,前台路径也一样,以及maven、jdk等jar包都没有缺少,之后我在启动的这个主入口(springBootApplication)里面看到这个项目多了@enableWebMvc 注解,注释掉这个注解后启动可以引用静态在资源文件了
@enableWebMvc 把这个注解注释掉后就能够引用其他js文件了。百度了下@enableWebMvc这个注解的含义:
表示启动spring mvc特性,也就是说可以通过这个注解,然后在java代码代码中实现对js或css的页面的过滤/拦截