Cómo configurar el contenedor de servlet integrado en SpringBoot

SpringBoot usa Tomcat como el contenedor de servlet integrado de forma predeterminada
Inserte la descripción de la imagen aquí

1. Cómo personalizar y modificar la configuración relevante del contenedor Servlet

1.1 Modificar la configuración relacionada con el servidor

1.1.1 Modificar mediante archivo de configuración

server.port=8081
server.context-path=/crud

server.tomcat.uri-encoding=UTF-8

//通用的Servlet容器设置
server.xxx
//Tomcat的设置
server.tomcat.xxx

1.1.2 编写 EmbeddedServletContainerCustomizer


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

2. Registre los tres componentes principales de Servlet

2.1 Registrar servlet

Primero escribe un servlet

public class MyServlet extends HttpServlet {
    
    

    //处理get请求
    @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("Hello MyServlet");
    }
}

Luego inyecte el Servlet escrito en el contenedor

@Configuration
public class MyServerConfig {
    
    

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

2.2 Filtro de registro

Primero escribe un filtro

public class MyFilter implements Filter {
    
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        System.out.println("MyFilter process...");
        chain.doFilter(request,response);

    }

    @Override
    public void destroy() {
    
    
    }
}

Luego inyecte el filtro escrito

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

2.3 Registrar oyente

Primero escribe un oyente

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("contextDestroyed...当前web项目销毁");
    }
}

Reinyectar al oyente

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

3. Reemplace Tomca con otros contenedores de Servlet integrados

En la fábrica de clases de implementación de la interfaz ConfigurableEmbeddedServletContainer, encontramos que hay tres contenedores de Servlet integrados predeterminados en SpringBoot:
Inserte la descripción de la imagen aquí
Tomcat se usa por defecto

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

Modifiquemos la configuración predeterminada:

<!-- 引入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>

Primero excluimos Tomcat y luego presentamos otros contenedores.
Lo mismo

<!-- 引入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>

4. Utilice un contenedor de servlet externo

Contenedor de servlet integrado: la aplicación está empaquetada en un jar ejecutable
Ventajas: simple y portátil
Desventajas: JSP no es compatible de forma predeterminada, la optimización y personalización son más complicadas
Contenedor de servlet externo: Tomcat se instala afuera y la aplicación está empaquetada en un paquete war Los
pasos son los siguientes:

  • Crea un proyecto de guerra; (puedes usar idea para crear una buena estructura de directorios)
  • Especifique Tomcat como se proporciona, y la idea se cambia automáticamente cuando se crea la estructura del directorio.
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>
  • Escriba una subclase de SpringBootServletInitializer y llame al método configure, si la estructura de directorio creada por IDEA, puede encontrar que esta clase ha sido creada
public class ServletInitializer extends SpringBootServletInitializer {
    
    

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    
    
       //传入SpringBoot应用的主程序
      return application.sources(SpringBoot04WebJspApplication.class);
   }
}

Además, una cosa a la que hay que prestar atención es el problema de la estructura del proyecto.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Después de crear el directorio correspondiente de la manera conveniente de IDEA, puede escribir código comercial e iniciar la aplicación.

Supongo que te gusta

Origin blog.csdn.net/weixin_44726976/article/details/109328198
Recomendado
Clasificación