SptingBoot下访问静态资源要加后缀以及templates下静态资源访问不到的问题
SptingBoot下访问html静态资源要加后缀以及templates下静态资源访问不到的问题
访问静态资源要加后缀和tempates目录下静态资源访问不到,都是因为没有配置视图解析器
第一个问题
我在学习SpringBoot的时候,在static创建了两个html文件,他们都没有使用thymeleaf这种模板引擎
比如这个login.html:
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
哈哈,这里登录
</body>
</html>
然后我设置默认首页为login.html
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/").setViewName("login");
}
登录成功或失败后跳转页面也是这样写的
结果运行后访问不到,报出这样的错误
之后我在资源名上加了后缀,如这样,问题解决
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/").setViewName("login.html");
}
但是这个问题让我百思不得其解,网上搜出来教你如何实现页面跳转大多都不加后缀,我觉得应该是哪里没有配置好
第二个问题
我把静态资源放到templates下面,竟然不管怎么样都访问不到
SpringBoot对资源的加载
SpringBoot默认在resource下的static中存放静态资源,templates中存放动态资源,框架会自动帮我们去加载这些资源,static优先加载。
将这两个html文件放到templates下之后,可以在target中看到templates
但访问之后还是报错
之后我搞懂了是怎么回事。
static里的静态资源是可以直接通过网址访问,也可以通过controller进行return的跳转
比如我可以直接在浏览器中输入localhost:8080/login.html访问到这个东西
而templates里的资源默认是动态资源且不对外开方,需要配合控制器和视图解析器去访问
所以说,我引入thymeleaf之前,这里面的资源就处理不了,就访问不到或者出错。
- 引入thymeleaf后,就可以在文件后不加.html了,仅限templates下的文件
- 引入thymeleaf后,动态跳转会覆盖掉静态,比如static和thymeleaf下都有一个index.html,在地址栏访问会默认跳到static下面的。
- 动态跳转省去后缀,若想访问同名的静态资源,就得加上后缀。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理