信息发布→ 登录 注册 退出

SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

发布时间:2026-01-11

点击量:
目录
  • 三大组件作用
    • 1、Servlet
      • HttpServlet
    • 2、Filter
      • 什么是oop?(拓展)
      • 什么是aop?(拓展)
      • 过滤器的生命周期:
    • 3、Listener
    • 代码示例
      • 1、导入依赖
        • 2、创建Listener(创建一个类实现ServletContextListener 接口)
          • 3、创建一个servlet(创建一个类实现HttpServlet 接口)
            • 4、创建filter(创建一个类实现filter接口)
              • 5、创建配置类
                • 6、测试效果

                本篇主要讲解SpringBoot当中使用Servlet三大组件,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!

                三大组件作用

                1、Servlet

                Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理。
                Servlet的任务有:

                1、接收请求数据:我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头、参数等各种信息。
                2、处理请求:通常我们会在service、doPost或者doGet方法进行接收参数,并且调用业务层(service)的方法来处理请求。
                3、完成响应:处理完请求后,我们一般会转发(forward)或者重定向(redirect)到某个页面,转发是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,两者是有很大区别的。

                HttpServlet

                间接实现了Servlet接口,通过继承HttpServlet实现了一个Servlet时,我们只需要根据处理请求的类型(method的值)来重写不同方法,处理get请求,重写doGet请求;处理post请求,重写doPost请求。

                2、Filter

                在客户端到服务器的过程中,当发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行,在服务器给客户端响应时也会进行判断 如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行。

                什么是oop?(拓展)

                面向对象编程,java是面向对象变成,封装、继承、多台、抽象。

                什么是aop?(拓展)

                面向切面编程。用来过滤请求。在请求到达servlet之前,对其进行过滤。

                它是sun公司srvlet2.3版本之后推出的新功能,在2.3之前的版本没有该功能,定义一个过滤器需要实现(implement)Filter接口,这里实现的是javax.servlet.Filter。

                过滤器的生命周期:

                在项目开始启动的时候,过滤器开始初始化,当有请求来的时候开始自动去执行doFilter方法,随着项目的关闭过滤器开始停止。

                3、Listener

                Listener就是监听器,我们在JavaSE开发或者Android开发时,经常会给按钮加监听器,当点击这个按钮就会触发监听事件,调用onClick方法,本质是方法回调。在JavaWeb的Listener也是这么个原理,但是它监听的内容不同,它可以监听Application、Session、Request对象,当这些对象发生变化就会调用对应的监听方法。

                监听器:相当于之前所学的事件
                源:监听的是谁
                动作:触发的条件
                响应:当条件满足时会执行的函数

                ServletContext对象:
                声明周期:随着项目的启动而创建,随着项目的关闭而销毁。
                生命周期可以理解为:监听器>过滤器>servlet

                代码示例

                在不用springboot项目的时候我们想要使用这些功能都是在web.xml当中配置,而SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。
                这里我直接通过一个小demo给大家演示,并展示效果

                1、导入依赖

                <dependencies>
                		<dependency>
                			<groupId>org.springframework.boot</groupId>
                			<artifactId>spring-boot-starter-web</artifactId>
                		</dependency>
                </dependencies>

                2、创建Listener(创建一个类实现ServletContextListener 接口)

                package com.gzl.cn.listener;
                
                import javax.servlet.ServletContextEvent;
                import javax.servlet.ServletContextListener;
                
                public class MyListener implements ServletContextListener {
                 @Override
                 public void contextInitialized(ServletContextEvent sce) {
                  System.out.println("contextInitialized...web应用启动");
                 }
                
                 @Override
                 public void contextDestroyed(ServletContextEvent sce) {
                  System.out.println("contextDestroyed...当前web项目销毁");
                 }
                }

                3、创建一个servlet(创建一个类实现HttpServlet 接口)

                package com.gzl.cn.servlet;
                
                import javax.servlet.ServletException;
                import javax.servlet.http.HttpServlet;
                import javax.servlet.http.HttpServletRequest;
                import javax.servlet.http.HttpServletResponse;
                import java.io.IOException;
                
                public class MyServlet extends HttpServlet {
                
                 //处理get请求
                 @Override
                 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  doPost(req,resp);
                 }
                
                 @Override
                 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  resp.getWriter().write("Hello MyServlet");
                 }
                }

                4、创建filter(创建一个类实现filter接口)

                package com.gzl.cn.filter;
                
                import javax.servlet.*;
                import java.io.IOException;
                
                public class MyFilter implements Filter {
                
                 @Override
                 public void init(FilterConfig filterConfig) throws ServletException {
                
                 }
                
                 @Override
                 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                  System.out.println("MyFilter process...");
                  chain.doFilter(request,response);
                
                 }
                
                 @Override
                 public void destroy() {
                
                 }
                }

                5、创建配置类

                注册三大组件用以下方式,把他注入到容器当中即可生效。

                package com.gzl.cn.config;
                
                import java.util.Arrays;
                
                import org.springframework.boot.web.servlet.FilterRegistrationBean;
                import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
                import org.springframework.boot.web.servlet.ServletRegistrationBean;
                import org.springframework.context.annotation.Bean;
                import org.springframework.context.annotation.Configuration;
                
                import com.gzl.cn.filter.MyFilter;
                import com.gzl.cn.listener.MyListener;
                import com.gzl.cn.servlet.MyServlet;
                
                @Configuration
                public class MyServerConfig {
                
                 //注册三大组件
                 @Bean
                 public ServletRegistrationBean myServlet(){
                  ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
                  registrationBean.setLoadOnStartup(1);
                  return registrationBean;
                 }
                
                 @Bean
                 public FilterRegistrationBean myFilter(){
                  FilterRegistrationBean registrationBean = new FilterRegistrationBean();
                  registrationBean.setFilter(new MyFilter());
                  registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
                  return registrationBean;
                 }
                
                 @Bean
                 public ServletListenerRegistrationBean myListener(){
                  ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
                  return registrationBean;
                 }
                
                }

                6、测试效果

                項目启动的时候,Listener监听到了,并打印出了日志

                我们配置类当中我们配置的路径是访问myServlet触发过滤器和servlet
                所以这里我们直接访问 http://localhost:8080/myServlet

                访问的时候filter打印出来了

                在线客服
                服务热线

                服务热线

                4008888355

                微信咨询
                二维码
                返回顶部
                ×二维码

                截屏,微信识别二维码

                打开微信

                微信号已复制,请打开微信添加咨询详情!