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の便利な方法で対応するディレクトリを作成した後、ビジネスコードを記述してアプリケーションを起動できます。