您当前的位置: 首页 >  spring

Charge8

暂无认证

  • 0浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot 整合Servlet、Filter和Listener

Charge8 发布时间:2019-05-17 15:43:54 ,浏览量:0

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~

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0389s