当前位置: 首页 > news >正文

SpringBoot2~~~

目录

拦截器与过滤器的区别

异常处理

自定义异常页面

全局异常

自定义异常

注入Servlet、Filter、Listener

使用注解方式注入

@WebServlet

@WebFilter

@WebListener

使用RegisterationBean方式注入

内置Tomcat配置和切换

通过application.yml来配置

通过类来配置

切换WebServer,切换成Undertow

数据库操作

JDBC+HikariDataSource

整合Druid到Spring-Boot

自定义方式

Druid基本使用

Durid监控功能

引入starter方式

整合Mybatis

配置文件

注解解决时间问题

整合Mybatis-Plus

引入依赖

application.yml配置数据源参数

使用德鲁伊数据源


拦截器与过滤器的区别

Servlet可以理解成DispatcherServlet,执行doService()再执行doDispatch()分发

当请求过来,先走过滤器,走doService()方法然后分发,再走拦截器(如果被拦截的话)

过滤器不会处理请求转发(在浏览器内部之间,不会从外部发出)

拦截器会处理请求转发(作为spring的一个组件,除非放行不会处理)

重定向要走过滤器,因为是从浏览器发出请求

异常处理

自定义异常页面

按照状态码来处理

Spring Boot 提供/error(默认)请求转发的方式处理所有错误的映射,会走拦截器
如果浏览器访问不存在的映射,会响应“whitelabel”错误视图
底层默认由DefaultErrorViewResolver处理错误

provider:

1、目录下没有指定响应码(404)的错误页面,就是null

      在resolveResource方法遍历肯定也找不到页面,最后返回null

2、重新进入resolve方法,查找4xx页面,如果存在,provider不为null,否则为null。

      在resolveResource方法遍历查找4xx,如果找不到返回默认的error页面

1、找(/error+具体错误的状态码页面),比如404页面,/error/404

2、找/error/4xx

3、最后找默认的页面显示错误

静态文件                                                              模板引擎

 

使用模板引擎

存放在request域中,使用Thymeleaf能够在html页面输出错误信息

全局异常

按照java类型来处理

@ControllerAdvice+@ExceptionHandler 处理全局异常

底层是 ExceptionHandlerExceptionResolver 支持的

当发生 ArithmeticExceptionNullPointerException时,不使用默认异常机制匹配的 xxx.html , 而是显示全局异常机制指定的错误页面

再反射调用处理异常的方法

全局异常优先级大于默认异常处理机制
@COntrollerAdvice会注入到容器
@ExceptionHandler为空,处理任何异常

自定义异常

自定义一个异常 AccessException, 当用户访问某个无权访问的路径时,抛出该异常,显示自定义异常状态码
也可以把自定义异常放在全局异常处理器,仍然走全局异常处理机制,按照java异常类型来处理
先走ExceptionHandlerExceptionResolver查看是否有方法处理这个异常                               如果没有,就走 DefaultErrorViewResolver resolve方法,按照状态码处理

注入Servlet、Filter、Listener

使用注解方式注入

需要使用 @ServletComponentScan指定要扫描的原生组件才会注入到spring容器

@WebServlet

注入的原生的Servlet_ 不会被spring-boot的拦截器拦截,和DispatherServlet是同一级别

原因分析:

一个是tomcat组件,一个是spring组件

请求 Servlet

如果匹配到映射,直接执行doGet或doPost,不会到达 DispatherServlet,不会执行拦截器

如果没有匹配到映射,最后的路径会找 / ,会到达DispatherServlet,执行拦截器

@WebFilter

1、以前通过一个类实现Filter,在web.xml配置url-patern

2、过滤器配置的urlPatterns也会经过Springboot拦截器

3、在servlet匹配全部是/*,在Spring匹配全部是/**

@WebListener

使用RegisterationBean方式注入

将三个注解和@ServletComponentScan去掉

内置Tomcat配置和切换

通过application.yml来配置

比通过类配置更加全面

通过类来配置

切换WebServer,切换成Undertow

数据库操作

JDBC+HikariDataSource

HikariDataSource是springboot2默认数据源

在pom.xml引入data-jdbc-starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

 

Spring Boot 不知道项目要操作 Mysql 还是 Oracle , 需要在 pom.xml 指定导入数据库
驱动, 并指定对应版本

@SpringBootTest
class SpringbootApplicationTests {@Resourceprivate JdbcTemplate jdbcTemplate;@Testvoid t1() {BeanPropertyRowMapper<Admin> rowMapper =new BeanPropertyRowMapper<>(Admin.class);List<Admin> admins = jdbcTemplate.query("select * from `admin`", rowMapper);for (Admin admin : admins) {System.out.println(admin);}System.out.println("数据源:" + jdbcTemplate.getDataSource().getClass());}
}

整合Druid到Spring-Boot

自定义方式

Druid基本使用

1、修改pom.xml,引入druid依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.23</version>
</dependency>

2、创建配置类

 

如果没有dataSource配置,默认是HikanDataSource

Durid监控功能

原本是web.xml文件配置,现在使用配置类

import com.alibaba.druid.support.jakarta.StatViewServlet;
import com.alibaba.druid.support.jakarta.WebStatFilter;

@Configuration
public class Druid {@ConfigurationProperties("spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {DruidDataSource druidDataSource = new DruidDataSource();//加入监控功能, 加入sql防火墙监控//set用来设置DataSource的属性,类似name-valuedruidDataSource.setFilters("stat,wall");return druidDataSource;}//配置druid的监控页功能@Beanpublic ServletRegistrationBean statViewServlet() {StatViewServlet statViewServlet = new StatViewServlet();ServletRegistrationBean<StatViewServlet> servletRegistrationBean =// druid监控的访问页面是/druid/*//配置好之后,访问/druid下的地址的时候都会先登录new ServletRegistrationBean<>(statViewServlet, "/druid/*");// 开启监控页面的访问登录账号和密码servletRegistrationBean.addInitParameter("loginUsername", "druid");servletRegistrationBean.addInitParameter("loginPassword", "123456");return servletRegistrationBean;}//配置WebStatFilter, 用于采集web-jdbc关联的监控数据@Beanpublic FilterRegistrationBean webStatFilter() {WebStatFilter webStatFilter = new WebStatFilter();FilterRegistrationBean<WebStatFilter> filterRegistrationBean =new FilterRegistrationBean<>(webStatFilter);//默认对所有的url请求进行监控filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));//排除指定的urlfilterRegistrationBean.addInitParameter
("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean;}
}

引入starter方式

去掉druid的依赖和配置类

引入druid strater和application.yml

        <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency>
spring:datasource:url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver#配置druid和监控功能druid:stat-view-servlet:enable: truelogin-username: jacklogin-password: 666reset-enable: false#配置web监控web-stat-filter:enable: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"

整合Mybatis

mapper层加@Mapper
service层加@Service(在实现类上加),装配
Xxxmapper xxxmapper

controller层加@Controller,装配XxxService xxxservice

引入mybatis starter、mysql、配置处理器
application.yml设置数据源信息

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency>

设置与数据库对应的JavaBean

Resource目录下创建mapper目录,新建xxmapper.xml


java目录下创建mapper目录,新建xxmapper接口

配置文件

如果配置比较简单,就直接在application.yml配置即可
如果配置内容比较多,可以考虑单独的做一个mybatis-config.xml

使用mybatis-config.xml

注解解决时间问题

    //GMT 就是格林尼治标准时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date birthday;

整合Mybatis-Plus

引入依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>

引入了mybatis、自动配置、jdbc,不需要重复引入 

application.yml配置数据源参数

server:port: 9090
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8username: rootpassword: 123456

使用德鲁伊数据源

@Configuration
public class DruidDataSourceConfig {@ConfigurationProperties("spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {DruidDataSource druidDataSource =new DruidDataSource();return druidDataSource;}
}

创建Bean,比如Monster类

Mapper层
创建xxMapper接口,继承BaseMapper<>

BaseMapper默认提供了很多curd方法,可以直接使用,也可以自定义方法

@Mapper
public interface MonsterMapper extends BaseMapper<Monster> {}

现在可以在测试类中运行

Service层
传统方式:在接口中声明方法,然后使用实现类

在mybatis-plus中,可以继承父接口IService,提供了很多crud方法,也可以自定义方法

public interface MonsterService extends IService<Monster> {}

Service层实现类
传统方式:直接实现接口

在mybatis-plus中,需要继承ServiceImpl

@Service
public class MonsterServiceImplextends ServiceImpl<MonsterMapper, Mapper>implements MonsterService {}

@MapperScan

可以扫描指定包中的mapper接口,就不需要在每个mapper接口加上@Mapper

@MapperScan(basePackages =  {"com.springboot.mybatis.mapper"})


http://www.mrgr.cn/news/69072.html

相关文章:

  • 【汇编语言】更灵活的定位内存地址的方法(一)—— 字符操作:and与or指令、ASCII码及大小写转换
  • STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)
  • mysql 示例验证demo
  • MATLAB 使用教程 —— 常用函数
  • Ubuntu配置阿里云docker apt源
  • 云原生学习
  • WOA-RF|鲸鱼算法-随机森林-回归-降维|多变量特征筛选降维-回归预测|Matlab
  • JAVA开源项目 服装销售平台 计算机毕业设计
  • 嵌入式linux中gpio子系统的开发与实现
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)
  • 丹摩征文活动 |【AI落地应用实战】文本生成语音Parler-TTS + DAMODEL复现指南
  • 什么是上拉和下拉
  • 弄巧成拙的 PFC(Priority-based Flow Control)
  • SpringBoot框架:共享汽车行业的技术升级
  • 腾讯云双十一程序员的「采购单拼团攻略」
  • 进程相关内容
  • (done) gdb 在系统编程中的调试技巧
  • Redis中的数据结构
  • 四期书生大模型实战营(【基础岛】- 第1关 | 书生·浦语大模型开源开放体系)
  • 探针台的维护方法
  • Programming language theory 编程语言理论-03-惰性求值 Lazy Evaluation
  • 代码随想录算法训练营Day13 | 二叉树理论基础、递归遍历、迭代遍历、统一迭代、层序遍历
  • Kafka经典面试题
  • 前端必知必会-JavaScript 数组属性和方法
  • JDBC学习记录
  • 【万方数据】protobuf 逆向