SpringBoot自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面

在springboot应用中添加servlet

springboot的主servlet是DispacherServlet,它默认的url-pattern是“/”,如果我们还需要其他的servlet就需要开发人员自己进行定义和注册

代码注册

通过ServletRegistrationBean获得控制
在这里插入图片描述

注解注册

(1) 在启动类上标注@ServletComponentScan
(2) 在自定义的servlet类上标注@WebServlet即可
在这里插入图片描述
(3) 自定义Servlet
继承HttpServlet,再根据需求重写相关方法即可
在这里插入图片描述
如果是用代码进行注册就不需要在自定义的servlet类上标注@WebServlet(urlPatterns = “/myServlet”)

过滤器

注解实现01

(1) 编写自定义过滤器实现Filter接口添加@WebFilter注解

技巧01:必须实现 Filter 接口

技巧02init() 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次
技巧03destroy() 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次
技巧04doFilter() 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层

技巧05@WebFilter(urlPatterns = "/*") 注解的作用是指定过滤的请求路径,是一个String类型的数组

技巧06:可以利用 @Order(Integer类型) 来设置该过滤器的顺序号

在这里插入图片描述
(2) 在springboot应用启动类上标注@ServletComponentScan
在这里插入图片描述

注解实现02

(1) 创建一个过滤器类,该类必须实现Filter接口
(2) 直接在该过滤器类中添加@Component注解后该过滤器就会生效,无需再做其他任何操作

技巧01:这种方式默认会对所有的请求进行拦截

技巧02:通常只有一个过滤器时使用这种方式,而且这种方式只适用于自定义的过滤器

代码实现

实现方式01和实现方式02都只适用于自定义的过滤器,而不适用与第三方的过滤器;如果需要实现第三方的过滤器就必须在web.xml中进行Bean配置

技巧01SpringBoot项目没有web.xml文件,所以必须进行java配置
技巧02:推荐使用这种方式实现过滤器

(1) 导入第三方的过滤器相关jar包
(2) java配置类

技巧01:创建一个java类,类级别上添加 @Configuration 来注明该类是一个java配置类;这个类的作用就相当于web.xml

技巧02:定义一个方法,该方法的返回类型是 FilterRegistrationBean ;并在自定义方法上添加 @Bean 注解;这个方法的作用就相当于在web.xml中配置Bean

在这里插入图片描述
技巧03:可以在配置类中设置过滤器名称、过滤器顺序号以及过滤排除规则
在这里插入图片描述

监听器

注解实现

(1) 自定义监听器
在这里插入图片描述
(2) 在springboot应用启动类上标注@ServletComponentScan
在这里插入图片描述

拦截器

spring为我们提供了HandlerInterceptor接口来实现拦截器功能

HandlerInterceptor在调用controller之前调用controller之后以及视图渲染完成之后都可以得到控制

注解实现

(1) 创建自定义拦截器,实现HandlerInterceptor接口
在这里插入图片描述

     preHandle
调用controller  之前  执行,如果该方法返回false或者抛出异常就会结束请求
preHandle返回false或者抛出异常是就不会在继续往下执行(即:不会在继续conroller层,也不会执行postHandle和afterCompletion)

     postHandle
调用controller  之后  视图渲染完成之前
如果controller层中的方法抛出了异常  就会不会执行该方法了

      afterCompletion
视图渲染完成之后
不管controller层是否抛出异常都会执行该方法,只有preHandle返回false或者preHandle方法中抛出异常才不会执行该方法

(2) 配置自定义拦截器,继承WebMvcConfigurerAdapter,重写addInterceptors()方法
在这里插入图片描述

AOP

切面三要素

》切哪里 -> 切入点

》什么时候切 -> 增强

》干什么 -> 增强逻辑

自定义切面类
切面类上添加@Aspect 和 @Component

过滤器、拦截器、切面执行顺序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值