springboot2.x如何配置嵌入式servlet容器

配置嵌入式servlet容器

  • 一:如何定制和修改servlet容器
    • 1.修改和servlet有关的配置(ServletProperties)。
    • 2.编写一个WebServerFactoryCustomizer《ConfigurableServletWebServerFactory》:嵌入式的servlet容器的定制器,来修改servlet容器的配置
  • 二:注册servlet三大组件(Servlet,Filter,Listener)
    • Servlet
    • Filter
    • Listener
  • 二:能不能支持其他servlet容器

一:如何定制和修改servlet容器

1.修改和servlet有关的配置(ServletProperties)。

  1. server.port=xx;
  2. server.content-path=/crud
  3. 通用的servlet容器设置
    server.port
  4. tomcat设置
    server.tomcat.xx

2.编写一个WebServerFactoryCustomizer《ConfigurableServletWebServerFactory》:嵌入式的servlet容器的定制器,来修改servlet容器的配置

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer(){
        return new WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>() {
            //定制嵌入式的servlet容器相关的规则
            @Override
            public void customize(ConfigurableServletWebServerFactory factory) {
                factory.setPort(8081);
            }
        };
    }

}

二:注册servlet三大组件(Servlet,Filter,Listener)

由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。

注册三大组件用以下方式
servlet : ServletRegistrationBean
Filter: FilterRegistrationBean
Listener:ServletListenerRegistrationBean

Servlet

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

    public class MyServlet 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 {
      resp.getWriter().write("MyServlet ok");
  }
}

Filter

import javax.servlet.*;
import java.io.IOException;

/**
 * @author wanghao
 * @date 2020/4/7 21:33
 */
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter ok");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
 @Bean
    public FilterRegistrationBean<MyFilter> myFilter(){
       FilterRegistrationBean<MyFilter> bean=new FilterRegistrationBean<>();
       bean.setFilter(new MyFilter());
       bean.addUrlPatterns("/myServlet");
       return bean;
   }

Listener

package com.wh.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * @author wanghao
 * @date 2020/4/7 21:43
 */
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized...web启动");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextInitialized.....web销毁");
    }
}
 @Bean
    public ServletListenerRegistrationBean<MyListener> myListener(){
       ServletListenerRegistrationBean<MyListener> listener = new ServletListenerRegistrationBean<>(new MyListener());
       return listener;
   }

二:能不能支持其他servlet容器

你可能感兴趣的:(boot)