SpringBoot 整合Servlet、Filter和Listener

SpringBoot 整合Servlet、Filter和Listener,都有两种方式

方式一采用注解

一、SpringBoot和Servlet整合

1、用注解整合

     1)创建一个Servlet类继承HttpServlet类,用注解@WebServlet配置Servlet映射

@WebServlet(urlPatterns = "/index")
public class IndexServlet 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 {
        System.out.println("IndexServlet 的doXxx() 方法被调用了...");
        resp.getWriter().print("IndexServlet doXxx()!");
    }
}

      2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化

@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(Springbootdemo1Application.class, args);
    }
}

 

 

二、SpringBoot和Filter整合

1、用注解整合

1)创建一个MyFilter类实现Filter,用注解@WebFilter配置Filter映射

@WebFilter(filterName = "MyFilter", urlPatterns = {"/index"})
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String url = req.getRequestURI();
        //拦截器配置拦截有所url地址的时候/*,会出现连续拦截两次的情况,原因是因为浏览器发出访问了图标favicon.ico的请求
        if(url.contains("favicon.ico")){
            return;
        }
        System.out.println("doFilter...进来了");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("doFilter...出去了");
    }

    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化

@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(Springbootdemo1Application.class, args);
    }
}

 

三、SpringBoot和Listener整合

常用的Web事件的六大监听接口如下:

       ServletContextListener:用于监听Web的启动及关闭

       ServletContextAttributeListener:用于监听ServletContext范围内属性的改变

       ServletRequestListener:用于监听用户请求

       ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变

       HttpSessionListener:用于监听用户session的开始及结束

       HttpSessionAttributeListener:用于监听HttpSession范围内的属性改变

1、用注解整合

1)创建一个MyListernner类实现六大监听接口之一即可(根据业务),用注解@WebListener配置Listernner映射

@WebListener
public class MyListernner implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("MyListernner初始化啦...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("MyListernner摧毁啦...");
    }
}

2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化

@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(Springbootdemo1Application.class, args);
    }
}

 

           

 

方式二采用Spring注册Servlet、Filter和Listener(推荐使用)

创建的Servlet、Filter和Listener都不使用那些映射与扫描注解,只需要在@Configuration类中加入类似以下的代码即可注入。

public class IndexServlet extends HttpServlet {
...
}
@Configuration
public class WebConfig {

    @Bean
    public ServletRegistrationBean getIndexServletBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new IndexServlet());
        bean.addUrlMappings("/index");
        return bean;
    }

    @Bean
    public FilterRegistrationBean getMyFilterBean(){
        FilterRegistrationBean bean = new FilterRegistrationBean(new MyFilter());
        bean.addUrlPatterns("/*");
        return bean;
    }

    @Bean
    public ServletListenerRegistrationBean getMyListennerBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new MyListernner());
        return bean;
    }

}

效果和方式一相同

常用的Web事件的六大监听接口使用:六大监听器的web简单使用

 

end~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值