SpringBoot实现Servlet、过滤器(Filter)、监听器(Listener)

  有两种方法实现Servlet、Filter、Listener,在启动类上添加ServletComponentScan注解,或者分别创建RegistrationBean。

一、使用在启动类上添加ServletComponentScan注解的方式

  1、创建Servlet、Filter、Listener,并添加对应注解

  1)UserServlet

@WebServlet("/user.do")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.getWriter().print("user servlet");
    }
}

  2)LogFilter

@WebFilter("/user1.do")
public class LogFilter implements Filter {

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
                         FilterChain arg2) throws IOException, ServletException {
        System.out.println("income log filter "+arg0.getRemoteHost());
        arg2.doFilter(arg0, arg1);
    }
}

  3)MyContextListener

@WebListener
public class MyContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {}

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("start at " + LocalDateTime.now().toString());
    }
}

  2、启动类添加ServletComponentScan注解

@ServletComponentScan
@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication app=new SpringApplication(App.class);
        ConfigurableApplicationContext context= app.run(args);
    }
}

  3、测试

  1)启动,控制台输出:start at ... ...,Listener成功

  1)浏览器输入:http://localhost:8080/user.do,显示user servlet,Servlet成功

  2)浏览器输入:http://localhost:8080/user.do,控制台输出income log filter...,Filter成功

二、使用创建RegistrationBean的方式

  1、创建Servlet、Filter、Listener,并添加对应注解(同上)

  2、分别创建RegistrationBean

@SpringBootConfiguration
public class ServletConfig {
@Bean
public ServletRegistrationBean createBookServlet(){ ServletRegistrationBean servlet= new ServletRegistrationBean(new UserServlet(),"/user.do"); return servlet; }
@Bean
public FilterRegistrationBean createEchoFilter(){ FilterRegistrationBean filter=new FilterRegistrationBean(); filter.setFilter(new LogFilter()); filter.setUrlPatterns(Arrays.asList("/user.do")); return filter; }
@Bean
public ServletListenerRegistrationBean<MyContextListener> createStartedUpListener(){ ServletListenerRegistrationBean<MyContextListener> servletRegistrationBean
      =new ServletListenerRegistrationBean(new MyContextListener()); return servletRegistrationBean; } }

  3、测试(启动类去掉ServletComponentScan注解,其余同上)

 

posted @ 2019-11-29 23:03  雷雨客  阅读(346)  评论(0)    收藏  举报