1. 问题背景

把vue项目打包后放入springboot的static文件夹里,首先访问首页,然后在里面进行任何页面跳转都是没有问题的,但是假如在非首页的任何一个页面点击刷新,就会报错

2. 问题原因

主要问题在于:由vue开发的应用,采用的是SPA单页面模式

  • 传统的多页面模式,每一个页面对应一个html文件,当我们刷新页面的时候,会主动向后端请求对应的html文件,拿到html文件后渲染界面,但是SPA单页面模式只有一个index.html入口文件,后续的界面跳转都是通过js控制路由跳转实现的
  • 比如,现在想直接访问localhost:9999/login界面,,像后台发送了html问价请求,然而后台并没有login.html这一个html文件,所以就会返回如下的错误,正确的做法应该是:当我们直接输入localhost:9999/login路径时,先将页面重定向到localhost:9999/index.html,然后通过js控制路由实现跳转

3. 问题的解决

在springboot的项目下新建一个error的package,再新建一个ErrorConfig的类,设置出现错误界面时重定向到index.html

package com.example.error;
import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

@Component
public class ErrorConfig implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
        registry.addErrorPages(error404Page);
    }
}

关于SPA可以看我的下一篇博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐