全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

SpringBoot初始教程之Servlet、Filter、Listener配置详解

1.介绍

通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的

因为有可能打包之后是一个jar包的形式,这种情况下如何解决?SpringBoot 提供了两种方案进行解决

2.快速开始

2.1 方案一

方案一采用原生Servlet3.0的注解进行配置、@WebServlet 、@WebListener、@WebFilter是Servlet3.0 api中提供的注解
通过注解可以完全代替web.xml中的配置,下面是一个简单的配置

IndexServlet

@WebServlet(name = "IndexServlet",urlPatterns = "/hello")
  public class IndexServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      resp.getWriter().print("hello word");
      resp.getWriter().flush();
      resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      this.doGet(req, resp);
    }
  }

IndexListener

 @WebListener
  public class IndexListener implements ServletContextListener {
    private Log log = LogFactory.getLog(IndexListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
      log.info("IndexListener contextInitialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
  }

IndexFilter

@WebFilter(urlPatterns = "/*", filterName = "indexFilter")
  public class IndexFilter implements Filter {
    Log log = LogFactory.getLog(IndexFilter.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
      log.info("init IndexFilter");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      log.info("doFilter IndexFilter");
      filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override
    public void destroy() {

    }
  }

上面配置完了,需要配置一个核心的注解@ServletComponentScan,具体配置项如下,可以配置扫描的路径

@Target(ElementType.TYPE)
  @Retention(RetentionPolicy.RUNTIME)
  @Documented
  @Import(ServletComponentScanRegistrar.class)
  public @interface ServletComponentScan {


    @AliasFor("basePackages")
    String[] value() default {};


    @AliasFor("value")
    String[] basePackages() default {};


    Class<?>[] basePackageClasses() default {};

  }

把注解加到入口处启动即可

  @SpringBootApplication
  @ServletComponentScan
  public class AppApplication {

    public static void main(String[] args) throws Exception {
      SpringApplication.run(AppApplication.class, args);
    }

  }

2.2 方案二

方案二是采用自己SpringBoot 配置bean的方式进行配置的,SpringBoot提供了三种BeanFilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean 分别对应配置原生的Filter、Servlet、Listener,下面提供的三个配置和方案一采用的方式能够达到统一的效果

  @Bean
  public ServletRegistrationBean indexServletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new IndexServlet());
    registration.addUrlMappings("/hello");
    return registration;
  }

  @Bean
  public FilterRegistrationBean indexFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean(new IndexFilter());
    registration.addUrlPatterns("/");
    return registration;
  }
  @Bean
  public ServletListenerRegistrationBean servletListenerRegistrationBean(){
    ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
    servletListenerRegistrationBean.setListener(new IndexListener());
    return servletListenerRegistrationBean;
  }

3.总结

两种方案在使用上有差别,但是在内部SpringBoot的实现上是无差别的,即使使用的是Servlet3.0注解,也是通过扫描注解
转换成这三种bean的FilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean

4.扩展

大家在使用的时候有没有发觉,其实SpringBoot在使用SpringMvc的时候不需要配置DispatcherServlet的,因为已经自动配置了, 但是如果想要加一些初始配置参数如何解决,方案如下:

@Bean
  public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
    ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
    registration.addUrlMappings("*.do");
    registration.addUrlMappings("*.json");
    return registration;
  }

可以通过注入DispatcherServlet 然后用ServletRegistrationBean包裹一层 动态的加上一些初始参数

本文代码:springboot-Servlet-Filter-Listener_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# SpringBoot  # Servlet配置  # Filter配置  # Listener配置  # springboot注入servlet的方法  # SpringBoot中使用Filter和Interceptor的示例代码  # springboot使用filter获取自定义请求头的实现代码  # springboot中filter的用法详解  # springBoot的事件机制GenericApplicationListener用法解析  # 详解springboot整合Listener的两种方式  # SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listene  # 是一个  # 两种  # 如何解决  # 的是  # 但是在  # 有可能  # 不需要  # 上有  # 可以通过  # 三种  # 转换成  # 中不  # 大家多多  # 这三种  # 情况下  # 无差别  # req  # HttpServletResponse  # flush  # HttpServletRequest 


相关文章: 制作网站的模板软件,网站怎么建设?  宝塔建站后网页无法访问如何解决?  如何挑选高效建站主机与优质域名?  如何在腾讯云服务器上快速搭建个人网站?  移民网站制作流程,怎么看加拿大移民官网?  如何用美橙互联一键搭建多站合一网站?  如何用PHP快速搭建高效网站?分步指南  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何使用Golang table-driven基准测试_多组数据测量函数效率  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何通过VPS搭建网站快速盈利?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  家具网站制作软件,家具厂怎么跑业务?  如何选择适合PHP云建站的开源框架?  如何解决ASP生成WAP建站中文乱码问题?  建站之星导航如何优化提升用户体验?  如何通过山东自助建站平台快速注册域名?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何在Tomcat中配置并部署网站项目?  建站之星安装后如何自定义网站颜色与字体?  建站之星代理如何获取技术支持?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  ,制作一个手机app网站要多少钱?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  高端建站如何打造兼具美学与转化的品牌官网?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  网站制作报价单模板图片,小松挖机官方网站报价?  历史网站制作软件,华为如何找回被删除的网站?  建站主机数据库如何配置才能提升网站性能?  深入理解Android中的xmlns:tools属性  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  ,网页ppt怎么弄成自己的ppt?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何高效搭建专业期货交易平台网站?  上海网站制作开发公司,上海买房比较好的网站有哪些?  制作宣传网站的软件,小红书可以宣传网站吗?  无锡营销型网站制作公司,无锡网选车牌流程?  实例解析angularjs的filter过滤器  Android自定义listview布局实现上拉加载下拉刷新功能  如何在服务器上配置二级域名建站?  建站VPS选购需注意哪些关键参数?  贸易公司网站制作流程,出口贸易网站设计怎么做?  C++中引用和指针有什么区别?(代码说明)  ,如何利用word制作宣传手册?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何登录建站主机?访问步骤全解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。