SpringBootで組み込みサーブレットコンテナを設定する方法

SpringBootは、デフォルトで組み込みサーブレットコンテナとしてTomcatを使用します
ここに写真の説明を挿入

1.サーブレットコンテナの関連する構成をカスタマイズおよび変更する方法

1.1サーバーに関連する構成を変更する

1.1.1構成ファイルによる変更

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.サーブレットの3つの主要コンポーネントを登録します

2.1サーブレットの登録

最初にサーブレットを作成します

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");
    }
}

次に、作成したサーブレットをコンテナに挿入します

@Configuration
public class MyServerConfig {
    
    

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

2.2レジスタフィルター

最初にフィルターを書く

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() {
    
    
    }
}

次に、書かれたフィルターを注入します

@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リスナーの登録

最初にリスナーを書く

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项目销毁");
    }
}

リスナーを再注入します

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

3.Tomcaを他の組み込みサーブレットコンテナに置き換えます

ConfigurableEmbeddedServletContainerインターフェースの実装クラスファクトリでは、SpringBootに3つのデフォルトの組み込みサーブレットコンテナがあることがわかりました
ここに写真の説明を挿入
。Tomcatがデフォルトで使用されます。

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

デフォルト設定を変更しましょう:

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

最初にTomcatを除外し、次に他のコンテナーを導入します。
同じ

<!-- 引入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.外部サーブレットコンテナを使用する

組み込みサーブレットコンテナ:アプリケーション実行可能jarにパッケージ化されます
長所:シンプルでポータブル
短所:JSPはデフォルトでサポートされておらず、最適化とカスタマイズはより複雑です
外部サーブレットコンテナ:Tomcatは外部にインストールされ、アプリケーションはwarパッケージにパッケージ化されます。
手順は次のとおりです。

  • 戦争プロジェクトを作成します;(アイデアを使用して適切なディレクトリ構造を作成できます)
  • 提供されているTomcatを指定すると、ディレクトリ構造が作成されるときにアイデアが自動的に変更されます。
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>
  • 書くのサブクラスSpringBootServletInitializerをし、configureメソッドを呼び出して、ディレクトリ構造がIDEAによって作成された場合は、このクラスが作成されていることを見つけることができます
public class ServletInitializer extends SpringBootServletInitializer {
    
    

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

また、プロジェクトの構造の問題にも注意が必要です。
ここに写真の説明を挿入
ここに写真の説明を挿入
IDEAの便利な方法で対応するディレクトリを作成した後、ビジネスコードを記述してアプリケーションを起動できます。

おすすめ

転載: blog.csdn.net/weixin_44726976/article/details/109328198