Spring Boot学习篇(二)

时间:2022-12-28 08:53:14

Spring Boot学习篇(二)

1.spring boot中的拦截器

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

Spring Boot学习篇(二)

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 测试结果

Spring Boot学习篇(二)

2.配置404页面和500页面

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

Spring Boot学习篇(二)

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页面

Spring Boot学习篇(二)

2.3.2 500页面

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

Spring Boot学习篇(二)

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 页面效果截图

Spring Boot学习篇(二)

b.2 控制台结果

Spring Boot学习篇(二)

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

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

Spring Boot学习篇(二)

b.2 控制台结果

Spring Boot学习篇(二)

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 配置的具体位置

Spring Boot学习篇(二)

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

Spring Boot学习篇(二)

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

Spring Boot学习篇(二)

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

Spring Boot学习篇(二)

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

Spring Boot学习篇(二)

4.8 测试

4.8.1 输入访问地址前

Spring Boot学习篇(二)

4.8.2 输入访问地址后

Spring Boot学习篇(二)