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下面的。
- 动态跳转省去后缀,若想访问同名的静态资源,就得加上后缀。