刚学完ssm,想将前段时间做的小项目优化一下,教学老师教了thymeleaf我觉得很好用,但是却发现只要是通过a标签触发的接口都会报500错误,但是相关的接口后端却执行完了。以下是一个点赞的功能,写好的页面是用a标签来访问点赞按钮功能,后端确确实实成功将数据保存到数据库,也就是对应接口确实执行成功了,但是后端最后还是报了java.io.FileNotFoundException,前端也因为报500的错误导致后面的效果全部失效了。我的初衷是点击a标签实现后端保存点赞的数据,但是thymeleaf却去访问了本不该存在的html文件
我唯一的解决思路只能将前端的a标签全部改了,但是目前我前端有很多a标签,我过几天要用这个项目做一些事情,可能改不过来这么多a标签,因为其中有一些还包含了css和js。求有没有限制thymeleaf去访问静态资源的方法,防止thymeleaf去访问本不该存在的html。
不改前端代码a标签的情况下解决这个问题
首先修改HTML页面对静态资源文件的访问路径。
(1)在HTML的头部添加thymeleaf的标记
<html lang="en" xmlns:th="http://www.thymeleaf.org">
(2)修改网页文档中的对静态资源的引用,语法规则如下:
命令格式:
th:href="@{/static/.....}"
命令用法:
<link rel="stylesheet" th:href="@{/static/vendor/bootstrap/css/bootstrap.min.css}">
1.在IDEA中测试路径写法是否正确是按住Ctrl键并用鼠标左键点击,若能跳转到资源则说明路径正确。
2.th:href 替换的是href属性,相对应的还有src,可以使用th:src=“@{/static/....}”进行替换
试试扩展MVC
我们需要对springMVC进行扩展配置则需要继承WebMvcConfigurationSupport
创建SpringMVC配置扩展类,并继承WebMvcConfigurationSupport类。
重写方法
重写方法addResourceHandlers,将其中的请求映射路径做修改。
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 将url为 /static/** 的请求映射到 /static/ 路径下进行查找
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
配置文件放行静态资源