Spring Boot学习篇(二)

news2024/11/23 13:01:32

Spring Boot学习篇(二)

1.spring boot中的拦截器

1.1 在com包.zlz包下面创建interceptor包,包的目录结构如下所示

在这里插入图片描述

1.2 在interceptor包下面创建MyInterceptor1和MyInterceptor2类(便于测试顺序)

1.2.1 MyInterceptor1类

package com.zlz.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//① 实现HandlerInterceptor接口
public class MyInterceptor1 implements HandlerInterceptor {
    //②重写preHandle方法,目的是Controller处理之前进行一些操作
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //③ 打印测试语句
        System.out.println("拦截器代码1");
        //④ 设置为true,就放行
        return true;
    }
}

1.2.2 MyInterceptor2类

package com.zlz.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor2 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //进控制器拦截
        System.out.println("进入拦截器 2");
        return true;
    }
}

1.3 在config包下面配置springmvc拦截器

package com.zlz.config;

import com.zlz.interceptor.MyInterceptor;
import com.zlz.interceptor.MyInterceptor2;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//只要是配置类都得加上
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加拦截器1,order的顺序,谁的数字小就谁先走
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").order(3);
        //添加拦截器2
        registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**").order(2);
    }
}

1.4 测试结果

在这里插入图片描述

2.配置404页面和500页面

2.1 在resource文件夹下面创建static文件夹.err文件夹,其目录结构如下所示

在这里插入图片描述

2.2 在err文件夹下面创建简单的404.html和505.html

2.2.1 404页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <h1>404页面——您访问的资源找不到</h1>
</body>
</html>

2.2.2 500页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <h1>500页面——程序员小哥哥正在努力修复中,请稍后访问</h1>
</body>
</html>

2.3 在config包下面创建ErrorPageConfig.java文件

package com.zlz.config;

import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
//配置404页面和500页面,一般是在程序已经确定没啥bug的情况下再去做这件事情的
//① 加上@Configuration注解,表示其是一个配置类
@Configuration
//② 实现ErrorPageRegistrar接口
public class ErrorPageConfig implements ErrorPageRegistrar {
    //③ 重写registerErrorPages方法
    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        //跳转到页面,static目录是不需要加上的
        //④ 添加404状态码和出现404时需要跳转的页面
        registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/err/404.html"));
        //⑤ 添加4500状态码和出现500时需要跳转的页面
        registry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/err/500.html"));
    }
}

2.3 测试运行截图

2.3.1 404页面

在这里插入图片描述

2.3.2 500页面

a 在TestController类里面中加入如下代码
//注意:TestController类上面并没有加上@RequestMapping注解
@RequestMapping("t1")
public String t1(){
    //指向下面这句话,会出现算术异常错误
    System.out.println(1/0);
    return "123";
}
b 访问该地址时,运行结果如下所示

在这里插入图片描述

3 全局异常处理

3.1 在config包下面创建全局异常处理类MyExceptionHandler

package com.zlz.config;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * 全局异常处理
 * @RestControllerAdvice 异常处理类 返回结果都是json
 * @ControllerAdvice 异常处理类 返回结果都是页面 都会走视图解析器
 */
//①加上@RestControllerAdvice注解
@RestControllerAdvice
public class MyExceptionHandler {
    //②使用@ExceptionHandler,指定异常类型
    @ExceptionHandler(NullPointerException.class)
    //③定义方法,并且形参里面写对应的异常类型,便于调试(控制台部分打印信息)
    public Map<String,Object> ex1(NullPointerException ex){
        //④ 打印异常报错信息
        ex.printStackTrace();
        //⑤ 存储错误信息到map集合里面
        Map<String,Object> map=new LinkedHashMap<>();
        //服务器自定义状态码
        map.put("code", 500);
        map.put("msg","服务器出现了空指针异常");
        //⑥ 把结果返回给前台
        return map;
    }
    @ExceptionHandler(Exception.class)
    public Map<String,Object> ex2(Exception ex){
        //打印异常信息,便于调试者调试,用了全局异常 一定要打印
        ex.printStackTrace();
        Map<String,Object> map=new LinkedHashMap<>();
        //服务器自定义状态码
        map.put("code", 500);
        map.put("msg","服务器出现了未知异常");
        return map;
    }
}

3.2 测试代码

3.2.1 空指针异常

a 在TestController类里面需要加入的代码
@RequestMapping("err1")
    public String err1(){
        String str=null;
        System.out.println(str.equals(""));
        return "123";
    }
b 浏览器访问err1地址后
b.1 页面效果截图

在这里插入图片描述

b.2 控制台结果

在这里插入图片描述

3.2.2 除了空指针外的其他异常

a 在TestController类里面需要加入的代码
 @RequestMapping("err2")
    public String err2(){
        System.out.println(6/0);
        return "123";
    }
b 浏览器访问err2地址后
b.1 页面效果截图

在这里插入图片描述

b.2 控制台结果

在这里插入图片描述

4 在springboot中使用jsp页面(不推荐使用,了解即可)

4.1 在pom.xml加入jsp依赖

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

4.2 pom.xml中设置打包方式为war包(后续会移除)

4.2.1 配置的代码

<!--确保能在main文件夹下创建webapp蓝色小圆点文件的必要条件,用完是可以注释掉或者删除掉的-->
<packaging>war</packaging>

4.2.2 配置的具体位置

在这里插入图片描述

4.3 在main包下面创建webapp文件夹,其目录结构如下所示

在这里插入图片描述

4.4 再把之前哪个打包方式注释就行,注释后的效果图如下所示

在这里插入图片描述

4.5 在controller包下创建JspController类

package com.zlz.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class JspController {
    @RequestMapping("index")
    public String a(){
        return "index";
    }
}

4.6 在application.yml文件中添加视图解析器的相关配置

spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

4.7 配置Working directory

4.7.1 双击Edit Configuration

在这里插入图片描述

4.7.2 把working directory的地址变成当前项目的地址➡点击ok按钮

在这里插入图片描述

4.8 测试

4.8.1 输入访问地址前

在这里插入图片描述

4.8.2 输入访问地址后

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合家庭作业

Homework01 按要求实现: (1)封装一个新闻类&#xff0c;包含标题和内容属性&#xff0c;提供get、set方法,重写toString方法&#xff0c;打印对象时只打印标题; (2)只提供一个带参数的构造器&#xff0c;实例化对象时&#xff0c;只初始化标题;并且实例化两个对象: 新闻一:…

【C数组】详解数组

数组前言一、一维数组的创建和初始化&#xff08;一&#xff09;数组的创建1.数组的概念和创建方式2.变长数组&#xff08;二&#xff09;数组的初始化&#xff08;三&#xff09;一维数组的使用&#xff08;四&#xff09;一维数组在内存中的存储二、二维数组的创建和初始化&a…

rabbitmq基础7——队列和消息过期时间设置、死信队列、延迟队列、优先级队列、回调队列、惰性队列

文章目录一、过期时间1.1 针对队列设置1.2 针对消息设置二、死信队列2.1 死信交换器2.2 死信队列原理2.3 延迟队列&#xff08;特殊用法&#xff09;三、优先级队列3.1 监控页面创建优先级队列3.2 监控页面创建优先级消息四、回调队列4.1 RPC的定义4.2 PRC工作机制4.3 监控页面…

java本地socket服务端暴露至公网访问【内网穿透】

Java 服务端demo环境 jdk1.8 框架:springbootmaven 开发工具:IDEA 在pom文件引入第三包封装的netty框架maven坐标 <dependency><groupId>io.github.fzdwx</groupId><artifactId>sky-http-springboot-starter</artifactId><version>0.…

叮叮当~~叮叮当~~|您有一份白玉兰酒店圣诞节豪礼等待抱走!

不知不觉2022年已经临近尾声 全国各地都已经放开了 相信有很多小伙伴在这一年 都没有好好的出来浪一浪 在即将到来的圣诞节 各地的圣诞玩乐都已经齐齐亮相 同时 白玉兰酒店客房 也已迎来了圣诞系列主题 是时候计划一场完美的圣诞之旅了 兰小姐为您准备了丰富多彩的圣…

【苹果家庭群发推送】软件安装Apple推送是一种基于IMESSAGE平台的新信息推送功效的营销软件

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

DevOps-7:Jenkins API介绍

前言&#xff1a; 为什么要使用Jenkins的API&#xff1f; 我在使用Jenkins的过程中&#xff0c;觉得Jenkins的UI还是有不少问题的&#xff1a; UI性能差&#xff0c;尤其是有一些任务在构建中时&#xff0c;UI非常卡顿&#xff0c;等个十来秒都正常&#xff0c;极端时甚至会崩…

LeetCode 221. 最大正方形

LeetCode 221. 最大正方形 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1",&quo…

【OpenCV-Python】教程:8-1 图像去噪 Image Denoising

OpenCV Python 图像去噪 Image Denoising 【目标】 非局部均值去噪算法去除图像中的噪声。 cv2.fastNlMeansDenoising() , cv2.fastNlMeansDenoisingColored() etc. 【理论】 在前面的章节中&#xff0c;我们已经看到了许多图像平滑技术&#xff0c;如高斯模糊&#xff0c…

1、MYSQL基础(DDL DML DCL)

&#xff08;1&#xff09;关于字段修改 change和modify的异同&#xff1a; 同&#xff1a;可以修改表的定义 异&#xff1a;change需要写两次列名&#xff0c;不方便&#xff0c;但是change可以修改表名&#xff0c;modify不可 &#xff08;2&#xff09;多表更新&#xff…

店铺如何快速实现数字化管理?不妨参考一下管理系统

百数店铺管理系统主要是以门店管理为核心&#xff0c;该应用管理涵盖商品、订单、库存、客户、采购、财务、营销等功能体系&#xff0c;维度数据分析&#xff0c;智能指导门店经营&#xff0c;账目清晰一目了然&#xff0c;店铺经营更高效。 1、销售看板 该分析报表里通过销售…

手把手教你玩转 Excel 数据透视表

1. 什么是数据透视表 数据透视表是一种可以快速汇总、分析大量数据表格的交互式分析工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视&#xff0c;并建立交叉表格&#xff0c;用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。 使用数据透视表…

【Vue + Koa 前后端分离项目实战6】使用开源框架==>快速搭建后台管理系统 -- part6 前端实现期刊列表管理【增删查改】

要把努力当成一种习惯&#xff0c;而不是一时热血。 对应后端部分章节回顾&#xff1a; 【Vue Koa 前后端分离项目实战4】使用开源框架&#xff1e;快速搭建后台管理系统 -- part4 后端实现【增删改查】功能_小白Rachel的博客-CSDN博客 目录 一、前端项目准备 1.运行项目 …

支持百问网T113 D1-H D1s V853 V851s 等开发板 使用 Tina Linux NOR Flash文件系统 开发指南

此文章内容适用于 百问网T113 D1-H D1s V853 V851s 等开发板&#xff0c;开发板详情请访问 www.100ask.net 。 1 简介 编写目的 此文档描述Sunxi NOR 模块的使用方法&#xff0c;为相关人员调试提供指导 适用范围 boot0: 适用于brandy-2.0u-boot: 适用于u-boot-2018kernel: …

记录内值排序

记录内值排序 【问题】 could anyone please suggest a way to accomplish this. i have a table which consists of six columns : Table name : orders num1 number, num2 number , num3 number , num4 number , num5 number , num6 number there is a routine which fi…

修改后的代码只进行了git add操作不小心给他恢复了怎么找回来

一份干净的代码在main.js里加了一行console.log(666)&#xff0c;并且只进行了git add 然后不小心给他reset了&#xff01; git reset --hard哦豁&#xff0c;没了&#xff1f; 别急一样可以恢复&#xff0c;我们先执行 git fsck --lost-found然后我们去项目的.git下找到这个…

初级软件测试面试会问什么 除了常见问题,技术题也是重点

众所周知&#xff0c;面试是我们进入一个公司的门槛&#xff0c;面试者只有通过了面试才能进入公司&#xff0c;因此&#xff0c;很多新手测试人就想要知道&#xff0c;自己去面试初级软件测试的岗位&#xff0c;HR们都会问些什么样的问题&#xff1f;自己可以从哪些方面做准备…

多线程顺序运行的 4 种方法

1、在子线程中通过join()方法指定顺序 通过join()方法使当前线程“阻塞”&#xff0c;等待指定线程执行完毕后继续执行。 举例&#xff1a;在线程thread2中&#xff0c;加上一句thread1.join()&#xff0c;其意义在于&#xff0c;当前线程2运行到此行代码时会进入阻塞状态&…

FineReport填报报表常用属性方法

1、去除填报页面选中单元格时的黑色边框 // 加载结束事件 _g().curLGP.hideSelectFrame(); 2、 获取单元格焦点 预览填报报表时&#xff0c;希望页面加载完成后&#xff0c;自动将光标定位在某个控件中&#xff0c;可以直接编辑。 // 获取A2单元格 var cell _g().curLGP.getT…

风控模型算法

目录1 蚂蚁金服2 陆金所3 京东金融4 苏宁金融5 百度金融6 腾讯理财通7 宜信8 钱大掌柜9 万达金融10 网易理财11 美团金融主要是整理目前市面上的风控模型以及风控算法。1 蚂蚁金服 &#xff08;1&#xff09;对接第三方征信公司芝麻信用分&#xff0c;通过用户信用历史、行为偏…