SpringBoot整合Servlet三大组件的两种方法

前言:

经常熟悉Servlet的人知道,Servlet最主要的是它的三大组件,Servlet、Filter、Listener。如果我们想要在SpringBoot中使用Servlet这三大组件,有两种方式,分别是组件注册和路径扫描。
组件注册就是自己写一个Servlet组件配置类,然后在里面进行逐个注册。
路径扫描就是用到SpringBoot中的注解,将注解写到自己组件的类上即可。

1.使用组件注册的方式整个Servlet三大组件

1.以servlet为例,创建一个你自己的servlet类(MyServlet),在该类上面加上@Component注解(该注解的意思是将该类作为组件注入Spring容器),该类需要继承自“HttpServlet”
SpringBoot整合Servlet三大组件的两种方法_第1张图片
2.创建一个Servlet配置类,在该类中注册刚刚创建的这个Servlet类。由于该类是配置类,所以在类上面要加上注解@Configuration
SpringBoot整合Servlet三大组件的两种方法_第2张图片
3.运行程序,在浏览器中输入“http://localhost:8080/myServlet”。具体端口以实际为准。
此时就可以看到效果了。
SpringBoot整合Servlet三大组件的两种方法_第3张图片
4.同理可得,创建一个自己的Filter类,该类需要实现“Filter”接口。这里仅做测试,仅在“doFilter”方法中写一些数据,具体项目需求以实际为准。
SpringBoot整合Servlet三大组件的两种方法_第4张图片
5.同样,需要为我们创建的myFilter类在刚刚的“ServletConfig”类中进行注册,指定对哪些路径进行过滤。
此处选择需要过滤的路径为"/image"和"/text"。当我们访问这些路径时,过滤器就会进行生效。
SpringBoot整合Servlet三大组件的两种方法_第5张图片
6.我们没有写这些页面,仅做测试。在浏览器中假装访问一下,虽然看不到具体的页面,但控制台会有反应。
SpringBoot整合Servlet三大组件的两种方法_第6张图片
控制台效果:
在这里插入图片描述
7.最后。我们可以注册一个我们自己的监听类“MyListener”,它需要实现“ServletContextListener”接口,这个接口是javax.servlet下的,注意导包不要导错。
这里为了测试,写一个运行和关闭时的监听,在控制台打印效果。
SpringBoot整合Servlet三大组件的两种方法_第7张图片
8.同理,我们需要在Servlet配置类中进行对“MyListener”类的注册。至此,三大组件都注册完成啦!
SpringBoot整合Servlet三大组件的两种方法_第8张图片
9.此时我们运行代码,我们注册的监听类就会生效,打印我们设定好的内容
在这里插入图片描述
当我们点击退出按钮时,关闭监听就会生效。
SpringBoot整合Servlet三大组件的两种方法_第9张图片

注意
其实我们不在“ServletConfig”类中注册也是可以生效的,因为我们自定义的类都加上了@Component注释,所以Spring会自动扫描到它们。我们加上一个配置类是为了更好的对它们进行控制。试想一下,虽然没有配置类它会自动注册,但像过滤这种操作,没有定义路径的情况下,Spring怎么知道我们想给谁做过滤呢?(默认对所有请求都进行过滤)

2.使用注解的方式整个Servlet三大组件

上面提到了使用注册的方式做整合,要多谢一个配置类。如果我们使用注解的方式就不需要写配置类了,也不需要给每一个定义的组件类加上@Component注解。

1.在我们自定义的MyServlet类上加上@WebServlet("/MyServlet")。“MyServlet”为映射路径,可以自定义。
SpringBoot整合Servlet三大组件的两种方法_第10张图片
2.在我们自定义的MyFilter类上加上@WebFilter(value = {"/iamge","/text"})。“/image”和“/text”为需要过滤的路径,可自定义。
SpringBoot整合Servlet三大组件的两种方法_第11张图片
3.在我们自定义的“MyListener”上加上注解@WebListener,这样一来就完成了。
SpringBoot整合Servlet三大组件的两种方法_第12张图片
4.最后也是最重要的,需要在项目的启动类中加上@ServletComponentScan注解,代表“开启基于注解方式的Servlet组件扫描支持”
SpringBoot整合Servlet三大组件的两种方法_第13张图片
5.此时可以进行测试,无论是servlet还是filter,或者是Listener,效果都是OK 的。
MyListener效果:
在这里插入图片描述
MyFilter效果:
SpringBoot整合Servlet三大组件的两种方法_第14张图片
在这里插入图片描述
MyServlet效果:
SpringBoot整合Servlet三大组件的两种方法_第15张图片

注意:
注册组件和注解组件的方式不能二者同时使用。使用注解时一定要注释掉配置类所有代码,包括自定义组件的@Component注解。使用注解时一定要在启动类中加上@ServletComponentScan 注解。

你可能感兴趣的:(spring,boot,spring,过滤器,servlet)