SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】CSDN 转过来的,所以格式与内容有些许错误请见谅

SpringBoot系列文章目录

SpringBoot知识范围-学习步骤--【思维导图知识范围】
@TOC

本系列校训

用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干!
只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知!

SpringBoot技术很多很多

本文专指ErrorPage出错页面,可以是SSM的项目,也可以是springBoot 的项目
在这里插入图片描述

韩顺平说:学习JAVA的人有两大难
第一困惑,JAVA能百度到的知识太多太多,完全不知道学啥
第二困惑,就是不知道以什么样的顺序去学,有的时候乱看一堆视频有遗漏,有的时候,两边的视频还有重复。
Spring的外围技术就更多了。其实,ErrorPage就是其中之一。
在这里插入图片描述
所以,学习东西要系统一些,如果基本功不够,那后面的技术就会学的很浮。

环境及工具:

本系列环境

环境 win11
工具 idea 2017/idea 2018
jdk 1.8
数据库 mysql5.5
maven 3.2.1
项目导入方式 maven 导入
数据库前端工具 mysql-front (navicat 也可以)

数据库前端工具:mysql-front (navicat 也可以)
主要是这些跟PHPStudy 2018 整合了,所以有的时候懒的打开navicat
关于环境的重要性,直接看上面的《SpringBoot 的项目编译即报错处理--JSB系列之001

必要的知识

error-page元素用于将一段错误代码或一个异常类型映射到Web应用中的资源路径,从而在产生特殊的HTTP错误或指定的Java异常时,将显示相关的资源。
error-code元素包含HTTP错误代码。exception-type是Java异常类型的完全限定的名称。location元素是Web应用中的资源相对于应用目录的路径。
下图就是一个错误页面的例子:
本质上就是让你原来的错误页数,换了一个“肤”,所以,其实,错误页面是接手了以前的那一堆的文字(这个会让客户很难受)
在这里插入图片描述
但是问题也是相对的。
在这里插入图片描述
事实上成熟的程序员更愿意看到的是这样的出错页面,因为这里包括了出错的信息,方便程序员修正这个错误,
==所以,ErrorPage(错误页面)一般是在项目的后期再加上去,不然很影响项目的前期调错==

这里举个例子==要注意的是这是JSP技术==,每次产生HTTP 404错误代码时,下面的部署描述符可使Web容器显示error404.html页面:

JSP page指令errorPage设置错误页
errorPage 属性用来指定一个 JSP 页面,由该页面来处理当前页面中抛出但未被捕获的任何异常(即类型为 Throwable 的对象)。它的应用方式如下:
<%@ page errorPaqe="Relative URL" %>
会出现错误的页面

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%>
<html>
<head>
<title>test errorPage</title>
</head>
<body>
<center><h2>errorPage属性测试</h2></center>
</body>
</html>

错误处理页error.jsp

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page isErrorPage="true"%><%--表示该页面是错误页 --%>
<html>
<head>
<title>test isErrorPage</title>
</head>
<body>
<center><h2>isErrorPage属性测试</h2></center>
</body>
</html>

深层一些的知识

异常由外到内如下:
web服务器处理异常--->web应用里面web.xml处理异常--->Spring框架处理异常---->控制器注释处理异常
--->控制器方法里面try处理异常
这里有一个顺序的问题
在这里插入图片描述

  1. Tomcat异常处理
    简单,暴力,项目实施人员就搞定,完全不管项目技术。
  1. Web应用程序
    有web.xml 的时候真香系列
    :在conf/web.xml里面加入错误页面配置信息。
    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/jsp/404.jsp</location>
    </error-page>    
    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/jsp/500.jsp</location>
    </error-page>
    <error-page>
        <exception-type>
            java.lang.Exception
        </exception-type>
        <location>/WEB-INF/jsp/error.jsp</location>
    </error-page>
    
  2. Spring框架处理异常
    就是本文啦。

    上效果图

    这里的效果图是本项目的,要区分开
    在这里插入图片描述

    在Spring Boot里使用ErrorPage

    这里还需要配置类的知识,请参见《SpringBoot 的配置类--JSB系列之003
    这里一定要把这个知识点弄懂,还有就是配置类与其它的controller的运行顺序。
    在这里插入图片描述
package com.code.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Configuration
public class WebConfig extends WebMvcConfigurerAdapter implements WebMvcConfigurer {
   
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
   
        registry.addInterceptor(new ErrorPageInterceptor());
        super.addInterceptors(registry);
    }
}

然后,做一个ErrorPageInterceptor 拦截器
在这里插入图片描述

package com.code.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;

/**
 * @program: ccx-axis-change
 * @description: 自定义errorPage拦截器
 * @author: YangPeng
 * @create: 2018-07-11 15:51
 **/
@Component
public class ErrorPageInterceptor extends HandlerInterceptorAdapter {
   
    private List<Integer> errorCodeList = Arrays.asList(404, 403, 500);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
            Exception {
   
        if (errorCodeList.contains(response.getStatus())) {
   
            //捕获异常后进行重定向,controller对应的requestMapping为/error/{code}
            response.sendRedirect("/error/" + response.getStatus());
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}

再然后,是处理这个映射地址的controler类

在这里插入图片描述

package com.code.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;



/**
 * @program: ccx-axis-change
 * @description: 自定义controller,来接收拦截器拦截后重定向的请求
 * @author: YangPeng
 * @create: 2018-07-11 15:51
 **/
@Controller

public class ErrorPageController {
   
    @RequestMapping(value = "/error/{code}")
    public String error(@PathVariable int code, Model model) {
   
        String pager = "";
        switch (code) {
   
            case 403:
                model.addAttribute("code", 404);
                pager = "/common/error_403";
                break;
            case 404:
                model.addAttribute("code", 500);
                pager = "/common/error_404";
                break;
            case 500:
                model.addAttribute("code", 500);
                pager = "/common/error_500";
                break;
        }
        return pager;
    }
}

最后还要做一个errorpage.html 或error.jsp的页面。
这里写的简单一些。

<html>
<head>
    <title>Title</title>
</head>
<body>
<img src="../img/error.jpg">
</body>
</html>

最后的成果。
在这里插入图片描述

还要注意的是

如果项目里使用了shiro 的话,一定要把 验证码的URL放出来,不然的话,你的验证码的路径被你自己的shiro ==敌我不分的胡乱==杀掉了。
这里就不详细说了,这个知识点涉及的问题,比验证码还多。

/**
     * 配置shiro的过滤器
     */
    @Bean(SHIRO_FILTER)
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
   
        ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
        // 设置安全管理器
        factoryBean.setSecurityManager(securityManager);
        // 设置未登陆的时要跳转的页面
        factoryBean.setLoginUrl(loginUrl);
        Map<String, String> filterChainDefinitionMap = new HashMap<>();
        // 设置放行的路径
        if (anonUrls != null && anonUrls.length > 0) {
   
            for (String anon : anonUrls) {
   
                filterChainDefinitionMap.put(anon, "anon");
            }
        }
        filterChainDefinitionMap.put("/static/**", "anon"); // 先把页面全放行了,不然调 试起来太麻烦了 ,by项目花园范德彪
        filterChainDefinitionMap.put("/code/**", "anon"); //这里要注意的是把验证码的URL放出来,不然不会显示到登陆上。by项目花园范德彪

        // 设置登出的路径
        if (null != logOutUrl) {
   
            filterChainDefinitionMap.put(logOutUrl, "logout");
        }
        // 设置拦截的路径
        if (authcUlrs != null && authcUlrs.length > 0) {
   
            for (String authc : authcUlrs) {
   
                filterChainDefinitionMap.put(authc, "authc");
            }
        }
        Map<String, Filter> filters=new HashMap<>();
//        filters.put("authc", new ShiroLoginFilter());
        //配置过滤器
        factoryBean.setFilters(filters);
        factoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return factoryBean;
    }

成功之后就可以展示出效果图的样子了。

另外:
数据源里的datasource 的名字。用户名,密码。还有就是mysql 的驱动是com.mysql.jdbc.Driver
总的来说,
com.mysql.jdbc.Driver 是 mysql-connector-java 5.5之前的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6及6之后的的,
初学者容易陷入一个误区,就是什么东西最新版是最好的,事实上很有可能他写的东西,明明JDK6.0就完全足够。一边喊着自己的机器内存不足,一边让内存运行着他自己用不到的东西。就比如说idea应该算是这些开发者工具里最卡的。有人可能明明只是打开几个网页,那为什么不使用webstorm? 甚至不是写很多代码的时候,为什么不选择更轻量级的VSCode?

配套资源

配套资源
SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】
https://download.csdn.net/download/dearmite/88136229

作业:

无,看懂即是神
范德彪经典语录: 学SpringBoot,你不能按套路出牌,你要灵活

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
XML Java 数据格式
Springboot中自定义组件
Springboot中自定义组件
|
1月前
|
JavaScript 前端开发 Java
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
|
1月前
|
Java 数据库连接 mybatis
springboot访问jsp页面变成直接下载?
springboot访问jsp页面变成直接下载?
|
1月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
1月前
|
JavaScript 前端开发
springboot+layui从控制器请求至页面时js失效的解决方法
springboot+layui从控制器请求至页面时js失效的解决方法
|
1月前
|
Java 数据库 数据安全/隐私保护
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
259 1
|
18小时前
|
NoSQL 前端开发 Java
技术笔记:springboot分布式锁组件spring
技术笔记:springboot分布式锁组件spring
|
8天前
|
Java API 数据安全/隐私保护
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
24 6
|
3天前
|
JavaScript 应用服务中间件 nginx
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
13 0
|
8天前
|
开发框架 安全 Java
信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等
信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等