前言
最近接手了一个前后端一体的项目,发现其默认路径不是主机+端口(如:http://localhost:3453/)的形式。很多页面的访问是加了一个层级。只要访问就会出现如下提示:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected
error (type=Not Found, status=404). No message available
对我这里而言就是访问不到页面,也就是常见的404错误。
解决
我的解决思路是在找不到网页404时,给出提示,并提供倒计时5秒后自动跳转至登录页/或者首页。
效果如图:
这就需要将404错误(HttpStatus.NOT_FOUND)页面数组注册到错误页面注册器中。首先需要后端的配置类中实现全局错误页面注册类ErrorPageRegistrar:
@Configuration
public class ErrorCodePageHandler implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
ErrorPage[] errorPages = new ErrorPage[1];
// 404错误页面映射
errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); //这里写入你的页面路径
registry.addErrorPages(errorPages);
}
}
这样就会在找不到页面的时候打开你的自定义404页面,我个人测试的404页面如下:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>404 找不到</title>
<style>
html,body{
width: 100%;
height: 100%;
}
h1{
margin-top: 10%;
width: 100%;
text-align: center;
height: 80px;
font-size: 60px;
}
p {
width: 100%;
height: 40px;
text-align: center;
font-size: 30px;
}
div{
width: 100%;
align-content: center;
text-align: center;
}
#tipDiv{
color: #761c19;
}
a {
width: 100%;
color: #0066cc;
text-align: center;
}
</style>
</head>
<body>
<h1>哦豁!</h1>
<p>你查找的网页不存在。</p>
<div id="tipDiv"></div>
<div>
<a id="goBtn">直接跳转</a>
</div>
<script>
var goBtn = document.getElementById('goBtn');
var tipDiv = document.getElementById('tipDiv');
var dreUrl = ""; //这里是你的跳转连接
goBtn.addEventListener('click',function(){
location.href = dreUrl;
});
var timer =5;
setInterval(function(){
if(timer == 0){
location.href = dreUrl;
}else {
tipDiv.innerHTML ='您将在'+timer +'秒后自动跳转页面';
timer--;
}
},1000);
</script>
</body>
</html>
这个404页面的功能很简单,主要就是使用了setInterval进行每秒的倒计时提示,并在计时结束后自动跳转至你指定的页面。同时提供了直接的跳转按钮。样式比较粗糙仅供学习参考。