zoukankan      html  css  js  c++  java
  • Springboot 配置嵌入式 Servlet 容器

    一、如何定制和修改 Servlet 容器的相关配置

    1、通过修改 application.properties 配置文件,例如

    //通用的Servlet容器设置
    server.xxx
    // 端口设置
    server.port=8081
    // 上下文根设置
    server.context-path=/xiaomaomao
    // tomcat 的设置
    server.tomcat.xxx
    // jetty 的设置
    server.jetty.xxx

    所有 Servlet 容器相关的配置都与 ServerProperties 进行了相关的绑定

     

    假设我们这里嵌入式的 Servlet 容器是 tomcat,我们需要修改 tomcat 相关配置,只需要在 application.properties 中进行配置就可以了,具体可以配置的选项如下

    2、通过往容器中注入 bean 的方式, Springboot 1.x 版本 和 Springboot 2.x 版本注入的 bean 不同

    Springboot 1.x 版本:编写一个嵌入式 Servlet 容器定制器 EmbeddedServletContainerCustomizer , 通过调用其中的 Custome

    @Configuration
    public class MyEmbeddedContainerConfig {
        @Bean
        public EmbeddedServletContainerCustomizer myCustomizer(){
            EmbeddedServletContainerCustomizer servletContainerCustomizer = new EmbeddedServletContainerCustomizer() {
                @Override
                public void customize(ConfigurableEmbeddedServletContainer container) {
                    container.setContextPath("/xiaomaomao");
                    container.setPort(8084);
                }
            };
            return servletContainerCustomizer;
        }
    }
    

    Springboot 2.x 版本:编写一个 WebServerFactoryCustomizer ,并将其加入容器中

    @Configuration
    public class MyEmbeddedContainerConfig {
        @Bean
        public WebServerFactoryCustomizer myCustomizer(){
            return new WebServerFactoryCustomizer<TomcatServletWebServerFactory>() {
                @Override
                public void customize(TomcatServletWebServerFactory factory) {
                    factory.setPort(8084);
                    factory.setContextPath("/xiaomaomao");
                }
            };
        }
    }
    

    二、注册 Servlet 三大组件 (Servlet、Filter、Listener)

    1、注册 Servlet

    @Bean
    public ServletRegistrationBean servletBean(){
    	// 自定义 MyEmbeddedServlet 实现 HttpServlet
    	ServletRegistrationBean<MyEmbeddedServlet> myEmbedServlet = new
    			ServletRegistrationBean<>(new MyEmbeddedServlet(), "/myEmbedServlet");
    	return myEmbedServlet;
    }
    

    2、注册 Filter

    @Bean
    public FilterRegistrationBean filterBean(){
    	FilterRegistrationBean<MyEmbeddedFilter> filterRegistrationBean = new FilterRegistrationBean<>();
    	filterRegistrationBean.setFilter(new MyEmbeddedFilter());
    	filterRegistrationBean.setUrlPatterns(Arrays.asList("/xiaomaomao","/myEmbedServlet"));
    	return filterRegistrationBean;
    }
    

    3、注册 Listener

    @Bean
    public ServletListenerRegistrationBean servletListenerRegistrationBean(){
    	ServletListenerRegistrationBean listenerRegistrationBean =
    			new ServletListenerRegistrationBean(new MyEmbeddedListener());
    	return listenerRegistrationBean;
    }

    Springboot 默认的嵌入式 Servlet 容器是 tomcat

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       // 引入 web 模块默认就是使用嵌入式的 Tomcat 作为 Servlet 容器
    </dependency>
    

     

    三、那么我们想切换其它的 Servlet 容器 (jetty、undertow),应该执行的步骤如下

    1、排除 Springboot 默认的嵌入式 Servlet 容器 tomcat 的依赖

    2、引入 jetty 或 undertow 的相关依赖即可

     

     

      

     

  • 相关阅读:
    分布式日志收集系统: Facebook Scribe之日志收集方案
    20111030 19:37 杨辉三角形 (java)
    pku acm 1833 排列
    俞敏洪郑大演讲经典语句
    自己在inode客户端的大量问题(不断更新中)(20120223 21:24 )
    智力测验:硬币问题
    windows up可以更新但是无法上网的一天挣扎
    hdu1754 I Hate It
    acm算法资源网站
    pku3041 Asteroids
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14033112.html
Copyright © 2011-2022 走看看