zoukankan      html  css  js  c++  java
  • 【串线篇】spring boot配置嵌入式servlet容器

    SpringBoot默认使用Tomcat作为嵌入式的Servlet容器

     

    问题?

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

    1、方法1修改和server有关的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】)

    server.port=8081
    server.context‐path=/crud
    
    server.tomcat.uri‐encoding=UTF‐8
    
    //通用的Servlet容器设置
    server.xxx
    //Tomcat的设置 
    server.tomcat.xxx

    2、方法2新建一个config类

    编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置

    @Bean //一定要将这个定制器加入到容器中
    public  EmbeddedServletContainerCustomizer  embeddedServletContainerCustomizer(){
    return  new  EmbeddedServletContainerCustomizer()  {
    
    //定制嵌入式的Servlet容器相关的规则
    @Override
    public  void  customize(ConfigurableEmbeddedServletContainer  container)  { 

    container.setPort(8083); } } }

    二、注册Servlet三大组件【Servlet、Filter、Listener】

    由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器(即嵌入式的tomcat)

    来启动SpringBoot的web应用,没有web.xml文件。

    1.新建这三个servlet类

    2.注册三大组件用以下方式新建一个config类,在这个配置类里传入自己的servlet

    ServletRegistrationBeanServlet

        //注册三大组件
        @Bean
        public  ServletRegistrationBean  myServlet(){
        ServletRegistrationBean  registrationBean  =  new  ServletRegistrationBean(new MyServlet(),"/myServlet");
        return registrationBean; 6    
    }

    FilterRegistrationBeanFilter

        @Bean
        public  FilterRegistrationBean  myFilter(){
        FilterRegistrationBean  registrationBean  =  new  FilterRegistrationBean();
        registrationBean.setFilter(new  MyFilter());
        registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
        return registrationBean; 7    }

    ServletListenerRegistrationBeanListener

        @Bean
        public  ServletListenerRegistrationBean  myListener(){
        ServletListenerRegistrationBean<MyListener>  registrationBean  =  new ServletListenerRegistrationBean<>(new  MyListener());
        return registrationBean; 5    
    }

    SpringBoot帮我们自动SpringMVC的时候,自动的注册SpringMVC的前端控制器;DIspatcherServlet;

    DispatcherServletAutoConfiguration中:

    @Bean(name  =  DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
    @ConditionalOnBean(value  =  DispatcherServlet.class,  name  = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
    public  ServletRegistrationBean  dispatcherServletRegistration( DispatcherServlet  dispatcherServlet)  {
    ServletRegistrationBean  registration  =  new  ServletRegistrationBean(
    //默认拦截: / 所有请求;包静态资源,但是不拦截jsp请求;/*会拦截jsp
    //可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
    
    registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME); registration.setLoadOnStartup(
    this.webMvcProperties.getServlet().getLoadOnStartup()); if  (this.multipartConfig  !=  null)  {
    registration.setMultipartConfig(this.multipartConfig);
    }
    return registration;
    }

    三、替换为其他嵌入式Servlet容器

    (默认是嵌入Tomcat)

    默认支持:

    Tomcat(默认使用)

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

    Jetty

    <!‐‐ 引入web模块 ‐‐>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐web</artifactId>
    <exclusions>
    <exclusion>
    <artifactId>spring‐boot‐starter‐tomcat</artifactId>
    <groupId>org.springframework.boot</groupId>
    </exclusion>
    </exclusions>
    </dependency>
    
    
    <!‐‐引入其他的Servlet容器‐‐>
    <dependency>
    <artifactId>spring‐boot‐starter‐jetty</artifactId>
    <groupId>org.springframework.boot</groupId>
    </dependency>

    Undertow

        <!‐‐ 引入web模块 ‐‐>
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐web</artifactId>
        <exclusions>
        <exclusion>
        <artifactId>spring‐boot‐starter‐tomcat</artifactId>
        <groupId>org.springframework.boot</groupId>
        </exclusion>
        </exclusions>
        </dependency>
    
    
        <!‐‐引入其他的Servlet容器‐‐>
        <dependency>
        <artifactId>spring‐boot‐starter‐undertow</artifactId>
        <groupId>org.springframework.boot</groupId>
        </dependency>
  • 相关阅读:
    用代码关闭冰刃(IceSword)
    .h和.cpp文件的区别
    获取其他进程的命令行(ReadProcessMemory其它进程的PPROCESS_PARAMETERS和PEB结构体)
    C#调用记事本并填写内容
    C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)
    JS代码的几个注意点规范
    javascript常用知识点集
    网站静态化处理—满足静态化的前后端分离(9)
    网站静态化处理—前后端分离—下(8)
    JS对文档进行操作
  • 原文地址:https://www.cnblogs.com/yanl55555/p/12091655.html
Copyright © 2011-2022 走看看