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 的相关依赖即可

     

     

      

     

  • 相关阅读:
    jS Ajax 上传文件报错"Uncaught TypeError: Illegal invocation"
    layer实现关闭弹出层刷新父界面功能详解
    PHP开发APP接口简单签名全过程(二)实际测试
    PHP开发APP接口简单签名全过程(一)
    Laravel 避免 Trying to get property of non-object 错误的六种方法 [新增第六种 data_get]
    在PHP代码中将HTML代码原样输出的方式
    在使用 Laravel Eloquent 模型时,我们要判断取出的结果集是否为空,但我们发现直接使用 is_null 或 empty是无法判段它结果集是否为空的!!!
    使用layer的iframe层提交表单后,需要关闭当前的iframe层,然后刷新父页面的方法
    laravel中如何实现验证码验证及使用
    递归思想的由来
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14033112.html
Copyright © 2011-2022 走看看