• 26. SpringBoot 注册原始Servlet三大组件【Servlet、Filter、Listener】


    由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文 件。 注册三大组件用以下方式:

    分别是3个组件: 1 . ServletRegistrationBean:servlet  2. FilterRegistrationBean 过滤器  3.ServletListenerRegistrationBean 监听器

    首先先创建这3大件的类,实现各自的父类 具体看代码:

    A.Servket:

    package com.bihu.component;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    //继承HttpServlet 重写你想实现方法即可
    public class MyServlet extends HttpServlet {
        @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 !"); //那就简简单单打印一句话
        }
    }
    MyServlet

    B.Filter

    package com.bihu.component;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    //过滤器是实现filter接口【javax.servlet中那个】
    public class MyFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.print("拦截到一个请求 - IP:");
            System.out.println(servletRequest.getLocalName());
            System.out.println("过滤器正常运作---已放行");    //随便打印一句话
            filterChain.doFilter(servletRequest,servletResponse);   //放行
        }
    
        @Override
        public void destroy() {
    
        }
    }
    MyFilter

    C.Listener

    package com.bihu.component;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    //监听器实现ServletXXXListener  XXX代表...学过JSP 的你懂的
    public class MyListener implements ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
            System.out.println("监听到一个销毁的请求 - IP:");
            System.out.println(servletRequestEvent.getServletRequest().getLocalName());    //随便打印一句话
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent servletRequestEvent) {
            System.out.println("监听到一个请求 - IP:");
            System.out.println(servletRequestEvent.getServletRequest().getLocalName());    //随便打印一句话
        }
    }
    MyListener

    然后我们吧他们三个分别注册 - 》 3个组件加入容器中:

    package com.bihu.config;
    
    import com.bihu.component.MyFilter;
    import com.bihu.component.MyListener;
    import com.bihu.component.MyServlet;
    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 java.io.File;
    import java.util.Arrays;
    
    @Configuration
    public class ServletConfig {
    
        //注册Servlet
        @Bean
        public ServletRegistrationBean mServlet(){
            //下面直接用匿名函数写  当然你可以先New 然后分开写。
            return new ServletRegistrationBean(new MyServlet(),"/servlet");
        }
    
        //--------------------------------------------------------
        //注册Filter
        @Bean
        public FilterRegistrationBean mFilter(){
            //你可以点源码进去看看 匿名函数直接写不方便 我们分开:
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new MyFilter());
            filterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); //参数是一个集合 ,转换一下然后拦截全部
            return filterRegistrationBean;
        }
        //--------------------------------------------------------
        //注册Listener
        @Bean
        public ServletListenerRegistrationBean mListener(){
            return  new ServletListenerRegistrationBean(new MyListener());  //直接用匿名函数
        }
    }
    ServletConfig | Servlet配置类

    运行:

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15154382.html

  • 相关阅读:
    均匀采样单位圆
    3Sum
    查看SQL语句在SQL Server上的执行时间
    ASP.NET页面请求处理
    原型模式
    ASP.NET页面错误处理
    电子商务推荐位商品模型设计
    HttpModule与HttpHandler使用
    装饰者模式
    ASP.NET编程模型
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15154382.html
Copyright © 2020-2023  润新知