SpringBoot注册web组件

目录

前言

一、注册Servlet组件

[1.1 使用SpringBoot注解加继承HttpServet类注册](#1.1 使用SpringBoot注解加继承HttpServet类注册)

[1.2 通过继承HttpServet类加配置类来进行注册](#1.2 通过继承HttpServet类加配置类来进行注册)

二、注册Listener组件

[2.1 使用SpringBoot注解和实现ServletContextListener接口注册](#2.1 使用SpringBoot注解和实现ServletContextListener接口注册)

[2.2 ServletContextListener接口和配置类来进行注册](#2.2 ServletContextListener接口和配置类来进行注册)

三、注册Filter组件

[3.1 使用SpringBoot注解加实现Filter接口注册](#3.1 使用SpringBoot注解加实现Filter接口注册)

[3.2 通过实现Filter接口和配置类来进行注册通过实现](#3.2 通过实现Filter接口和配置类来进行注册通过实现)


前言

Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制。Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件。

  1. Servlet:Servlet是Java Web应用程序的基础,它是一个Java类,用于处理客户端请求并生成响应。Servlet可以通过注解或web.xml文件进行配置,它通常用于处理HTTP请求和响应。
  2. Filter:Filter是一个Java类,用于拦截和处理客户端请求和响应。Filter可以在请求到达Servlet之前或响应返回客户端之前执行预处理和后处理操作,例如验证用户身份、编码解码、压缩和解压缩等。
  3. Listener:Listener是一个Java类,用于监听Web应用程序中的事件,并在事件发生时执行相应的操作。Listener可以通过注解或web.xml文件进行配置,它通常用于处理应用程序启动、停止、会话创建和销毁等事件。

总之,Servlet三大组件是Java Web应用程序的核心组件,它们分别用于处理请求、拦截请求和监听事件,从而实现了一个完整的Java Web应用程序。

一、注册Servlet组件

由于SpringBoot项目没有web.xml文件,所以无法在web.xml中注册web组件,SpringBoot有自己的方式注册web组件。

1.1 使用SpringBoot注解加继承HttpServet类注册

编写servlet,首先是要添加@WebServlet注解;代码如下:

java 复制代码
package com.example.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/first")
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("First Servlet......");
        super.doGet(req, resp);
    }
}

启动类添加扫描Web组件用到的注解@ServletComponentScan

OK,直接运行看效果:访问:http://localhost:8080/first

是可以直接打印出来的。

1.2 通过继承HttpServet类加配置类来进行注册

ok,接下来我们讲解第二种注册方式,通过继承HttpServet类来进行注册,代码如下:

java 复制代码
package com.example.demo.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 SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Second Servlet........");
        super.doGet(req, resp);
    }
}

这里我们需要新建一个配置类,将该Servlet加载到Spring容器中,配置类代码如下

java 复制代码
package com.example.demo.config;

import com.example.demo.servlet.SecondServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ServletConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        // 注册Servlet组件
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
        // 将Servlet组件添加访问路径
        bean.addUrlMappings("/second");
        return bean;
    }
}

OK,然后我们点击运行,直接访问http://localhost:8080/second

因此说明了两种注册方式都是可用的。

二、注册Listener组件

2.1 使用SpringBoot注解和实现ServletContextListener接口注册

原理和上面一样只不过是直接注解,无需配置类,代码如下

java 复制代码
package com.example.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener()
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("FirsListener.........");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

此时如果我们直接运行项目就会打印上面那句话,接下来我们直接运行项目,看看是否打印,

说明该方法是可行的,

2.2 ServletContextListener接口和配置类来进行注册

同样我们去掉注解使用配置类注册 ,代码如下:

java 复制代码
package com.example.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class SecondListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Second Listener...........");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

配置类代码入下:

java 复制代码
package com.example.demo.config;


import com.example.demo.listener.SecondListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ListenerConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        // 注册Listener组件
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }
}

然后直接运行看看结果,

OK,同样也是没有问题的。

三、注册Filter组件

3.1 使用SpringBoot注解加实现Filter接口注册

和上面一样,代码如下:

java 复制代码
package com.example.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Scanner;

//@WebFilter("/first")
public class FirstServletFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入First Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

这里访问/frist的话/我们要输入true才进行放行,看看是否成功过滤,

OK,这里是成功了的,接下来也是一样的操作

3.2 通过实现Filter接口和配置类来进行注册通过实现

代码如下:

java 复制代码
package com.example.demo.filter;

import javax.servlet.*;
import java.io.IOException;
import java.util.Scanner;

public class SecondFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入Second Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才可以放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

配置类代码如下:

java 复制代码
package com.example.demo.config;

import com.example.demo.filter.SecondFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean (){
        // 注册filter组件
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
        // 添加过滤路径
        bean.addUrlPatterns("/second");
        return bean;
    }
}

同样这里访问/second的话/我们要输入true才进行放行,看看是否成功过滤,

OK,这里已经成功实现了!!!

相关推荐
Cikiss8 分钟前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
wxin_VXbishe8 分钟前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php
Cikiss9 分钟前
微服务实战——平台属性
java·数据库·后端·微服务
无敌の星仔18 分钟前
一个月学会Java 第2天 认识类与对象
java·开发语言
OEC小胖胖23 分钟前
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
java·spring boot·后端·spring·mybatis·web
2401_857617621 小时前
SpringBoot校园资料平台:开发与部署指南
java·spring boot·后端
quokka561 小时前
Springboot 整合 logback 日志框架
java·spring boot·logback
计算机学姐1 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
救救孩子把1 小时前
深入理解 Java 对象的内存布局
java
落落落sss1 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis