SpringBoot注册web组件

淡淡的烟草味﹌ 2023-10-16 12:20 126阅读 0赞

目录

前言

一、注册Servlet组件

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

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

二、注册Listener组件

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

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

三、注册Filter组件

3.1 使用SpringBoot注解加实现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注解;代码如下:

  1. package com.example.demo.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet("/first")
  9. public class FirstServlet extends HttpServlet {
  10. @Override
  11. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12. System.out.println("First Servlet......");
  13. super.doGet(req, resp);
  14. }
  15. }

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

bf5a3f4a5e834c24bd687d766f80f2d3.png

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

是可以直接打印出来的。

7eefd664f6534fe889d39e68ff2967d2.png

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

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

  1. package com.example.demo.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. public class SecondServlet extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  10. System.out.println("Second Servlet........");
  11. super.doGet(req, resp);
  12. }
  13. }

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

  1. package com.example.demo.config;
  2. import com.example.demo.servlet.SecondServlet;
  3. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class ServletConfig {
  8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
  9. @Bean
  10. public ServletRegistrationBean getServletRegistrationBean(){
  11. // 注册Servlet组件
  12. ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
  13. // 将Servlet组件添加访问路径
  14. bean.addUrlMappings("/second");
  15. return bean;
  16. }
  17. }

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

175bbc2178804ced8a0ed8e95b60cb34.png

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

二、注册Listener组件

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

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

  1. package com.example.demo.listener;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. import javax.servlet.annotation.WebListener;
  5. @WebListener()
  6. public class FirstListener implements ServletContextListener {
  7. @Override
  8. public void contextInitialized(ServletContextEvent sce) {
  9. System.out.println("FirsListener.........");
  10. }
  11. @Override
  12. public void contextDestroyed(ServletContextEvent sce) {
  13. ServletContextListener.super.contextDestroyed(sce);
  14. }
  15. }

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

15355b270ce940ef9dba76fc1a1c3dec.png

说明该方法是可行的,

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

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

  1. package com.example.demo.listener;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. public class SecondListener implements ServletContextListener {
  5. @Override
  6. public void contextInitialized(ServletContextEvent sce) {
  7. System.out.println("Second Listener...........");
  8. }
  9. @Override
  10. public void contextDestroyed(ServletContextEvent sce) {
  11. ServletContextListener.super.contextDestroyed(sce);
  12. }
  13. }

配置类代码入下:

  1. package com.example.demo.config;
  2. import com.example.demo.listener.SecondListener;
  3. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class ListenerConfig {
  8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
  9. @Bean
  10. public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
  11. // 注册Listener组件
  12. ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
  13. return bean;
  14. }
  15. }

然后直接运行看看结果,

96cb8d4d9660489e98fb43e6cfe7f338.png

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

三、注册Filter组件

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

和上面一样,代码如下:

  1. package com.example.demo.filter;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebFilter;
  4. import java.io.IOException;
  5. import java.util.Scanner;
  6. //@WebFilter("/first")
  7. public class FirstServletFilter implements Filter {
  8. @Override
  9. public void init(FilterConfig filterConfig) throws ServletException {
  10. Filter.super.init(filterConfig);
  11. }
  12. @Override
  13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  14. System.out.println("进入First Filter");
  15. Scanner scanner = new Scanner(System.in);
  16. boolean flag = scanner.nextBoolean();
  17. while(!flag){
  18. System.out.println("要输入true才放行!!!");
  19. flag = scanner.nextBoolean();
  20. }
  21. filterChain.doFilter(servletRequest,servletResponse);
  22. scanner.close();
  23. }
  24. @Override
  25. public void destroy() {
  26. Filter.super.destroy();
  27. }
  28. }

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

1448bc08584d4abcacb6c47ba6e1e6c0.png

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

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

代码如下:

  1. package com.example.demo.filter;
  2. import javax.servlet.*;
  3. import java.io.IOException;
  4. import java.util.Scanner;
  5. public class SecondFilter implements Filter {
  6. @Override
  7. public void init(FilterConfig filterConfig) throws ServletException {
  8. Filter.super.init(filterConfig);
  9. }
  10. @Override
  11. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  12. System.out.println("进入Second Filter");
  13. Scanner scanner = new Scanner(System.in);
  14. boolean flag = scanner.nextBoolean();
  15. while(!flag){
  16. System.out.println("要输入true才可以放行!!!");
  17. flag = scanner.nextBoolean();
  18. }
  19. filterChain.doFilter(servletRequest,servletResponse);
  20. scanner.close();
  21. }
  22. @Override
  23. public void destroy() {
  24. Filter.super.destroy();
  25. }
  26. }

配置类代码如下:

  1. package com.example.demo.config;
  2. import com.example.demo.filter.SecondFilter;
  3. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class FilterConfig {
  8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
  9. @Bean
  10. public FilterRegistrationBean getFilterRegistrationBean (){
  11. // 注册filter组件
  12. FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
  13. // 添加过滤路径
  14. bean.addUrlPatterns("/second");
  15. return bean;
  16. }
  17. }

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

d78d43f72636484b9989aa8140ca1a8a.png

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

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Regasm 注册C# com

         工作原因,需要把现成的C\编写的dll转变成可以供其他语言调用的组件接口。这过程中经历了点曲折,现在记录下来。     先从C\ 创建COM组件开始使用。第一

    相关 Vue注册

            本博客记录了小编在学习Vue过程中的体会与感悟,简单来说就是小编的学习笔记,学习地址主要为Vue的官网,官网地址为:[《Vue官方文档》][Vue]。相关学习笔

    相关 Vue.js注册

    组件是Vue.js最推崇的,也是最强大的功能之一,核心目标是为了可重用性高,减少重复性的开发。 组件有两种注册方式:全局注册和局部注册。 全局注册 Vue.