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

原文地址:https://www.cnblogs.com/bi-hu/p/15154382.html