IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot之集成Servlet、Filter、Listener -> 正文阅读

[Java知识库]SpringBoot之集成Servlet、Filter、Listener

SpringBoot之集成Servlet、Filter、Listener

Servlet

方式一:@WebServlet

首先创建一个MyServlet其继承了HttpServlet类并标记了一个@WebServlet(urlPatterns="/hello")注解,用来使当前类能够被SpringBoot扫描到,其urlPatterns="/servlet/hello"指明了该servlet将接收/servlet/hello的请求。

package com.baiyang.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(urlPatterns = "/servlet/hello")
public class MyServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello MyServlet!");
        PrintWriter writer = resp.getWriter();
        writer.println("hello servlet!");
    }
}

然后是SpringBoot启动类:

package com.baiyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = {"com.baiyang"})
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

}

启动类上标记了@ServletComponentScan(basePackages={"com.baiyang"}),其指明了开启Servlet组件扫描并且指明了扫描路径。
直接启动,即可通过访问localhost:8080/servlet/hello来请求到MyServlet

方式二: ServletRegistrationBean

如果不使用@WebServlet注解的方式,那么还可以通过注入ServletRegistrationBean的方式来配置Servlet。
和方式一一样准备MyServlet类,和方式一的唯一区别就只是没有标注@WebServlet注解:

package com.baiyang.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 {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello MyServlet!");
        PrintWriter writer = resp.getWriter();
        writer.println("hello servlet!");
    }
}

然后在启动类中通过@Bean加入ServletRegistrationBean的注入:

package com.baiyang;

import com.baiyang.servlet.MyServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

    @Bean
    public ServletRegistrationBean<MyServlet> getServletBean(){
        ServletRegistrationBean<MyServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(new MyServlet(),"/servlet/hello");
        servletServletRegistrationBean.setLoadOnStartup(1);
        return servletServletRegistrationBean;
    }

}

上面的getServletBean()方法,注入了ServletRegistrationBean<MyServlet>,同时指明了映射url为/servlet/hello


Filter

方式一:@WebFilter

首先创建一个MyFilter其继承了HttpFilter类并标记了一个@WebFilter(urlPatterns = "/*")注解,用来使当前类能够被SpringBoot扫描到,其urlPatterns="/*"指明了当前Filter将过滤所有请求。

package com.baiyang.filter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(urlPatterns = "/*")
public class MyFilter extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("hello,MyFilter!");
        chain.doFilter(request, response);
    }
}

然后是SpringBoot启动类:

package com.baiyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = {"com.baiyang"})
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

}

启动类上标记了@ServletComponentScan(basePackages={"com.baiyang"}),其指明了开启Servlet组件扫描并且指明了扫描路径。
直接启动,随后所有请求都将被该过滤器过滤。

方式二:FilterRegistrationBean

如果不使用@WebFilter注解的方式,那么还可以通过注入FilterRegistrationBean的方式来配置Filter。
和方式一一样准备MyFilter类,和方式一的唯一区别就只是没有标注@WebFilter注解:

package com.baiyang.filter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyFilter extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("hello,MyFilter!");
        chain.doFilter(request, response);
    }
}

然后在启动类中通过@Bean加入FilterRegistrationBean的注入:

package com.baiyang;

import com.baiyang.servlet.MyServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

    @Bean
    public FilterRegistrationBean<MyFilter> getFilterBean(){
        FilterRegistrationBean<MyFilter> servletServletRegistrationBean = new FilterRegistrationBean<>(new MyFilter());
		//设置过滤器过滤url
        ArrayList<String> urls = new ArrayList<>();
        urls.add("/*");
        servletServletRegistrationBean.setUrlPatterns(urls);
        servletServletRegistrationBean.setOrder(1); //设置过滤器执行顺序
        return servletServletRegistrationBean;
    }

}

上面的getFilterBean()方法,注入了FilterRegistrationBean<MyFilter>,同时指明了映射路径/*,其将过滤所有请求。


Listener

方式一:@WebListener

首先创建一个MyListener其实现了ServletContextListener类,指明其是一个servlet容器监听器,当容器启动时将执行contextInitialized()方法,当容器关闭时将执行contextDestroyed()方法;并标记了一个@WebListener注解,用来使当前类能够被SpringBoot扫描到。

package com.baiyang.listener;

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

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

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContextListener#contextDestroyed---");
    }
}

然后是SpringBoot启动类:

package com.baiyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = {"com.baiyang"})
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

}

启动类上标记了@ServletComponentScan(basePackages={"com.baiyang"}),其指明了开启Servlet组件扫描并且指明了扫描路径。
容器在启动的过程中将执行该容器监听器。

方式二:ServletListenerRegistrationBean

如果不使用@WebListener注解的方式,那么还可以通过注入ServletListenerRegistrationBean的方式来配置Listener。
和方式一一样准备MyListener类,和方式一的唯一区别就只是没有标注@WebListener注解:

package com.baiyang.listener;

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

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContextListener#contextInitialized---");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContextListener#contextDestroyed---");
    }
}

然后在启动类中通过@Bean加入ServletListenerRegistrationBean的注入:

package com.baiyang;

import com.baiyang.listener.MyListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

    @Bean
    public ServletListenerRegistrationBean<MyListener> getListenerBean() {
        ServletListenerRegistrationBean<MyListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>(new MyListener());
        listenerRegistrationBean.setEnabled(true);//启用状态
        listenerRegistrationBean.setOrder(1);//设置执行顺序
        return listenerRegistrationBean;
    }

}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:48:02  更:2022-05-21 18:48:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/9 22:09:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码