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下面的。
  • 动态跳转省去后缀,若想访问同名的静态资源,就得加上后缀。
posted @ 2021-08-25 23:48  博客是个啥?  阅读(673)  评论(0编辑  收藏  举报