1. 概要

このクイック記事では、 Tomcatサーバーをプログラムで作成、構成、および実行します。

2. 設定

開始する前に、 pom.xml に以下の依存関係を追加して、Mavenプロジェクトをセットアップする必要があります。

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${apache.httpclient}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

これは、プロジェクトでここで使用されている依存関係の最新バージョンを含むMavenCentralへのリンクです。

3. Tomcatの初期化と構成

まず、Tomcatサーバーの初期化と構成に必要な手順について説明します。

3.1. Tomcatの作成

次の手順を実行するだけでインスタンスを作成できます。

Tomcat tomcat = new Tomcat();

サーバーができたので、構成しましょう。

3.2. Tomcatの構成

サーバーを起動して実行する方法に焦点を当て、サーブレットとフィルターを追加します。

まず、ポート、ホスト名、および appBase (通常はWebアプリ)を構成する必要があります。 この目的のために、現在のディレクトリを使用します。

tomcat.setPort(8080);
tomcat.setHostname("localhost");
String appBase = ".";
tomcat.getHost().setAppBase(appBase);

次に、 docBase (このWebアプリケーションのコンテキストルートディレクトリ)を設定する必要があります。

File docBase = new File(System.getProperty("java.io.tmpdir"));
Context context = tomcat.addContext("", docBase.getAbsolutePath());

この時点で、Tomcatはほぼ機能しています。

次に、サーブレットとフィルターを追加し、サーバーを起動して、サーバーが機能しているかどうかを確認します。

3.3. Tomcatコンテキストへのサーブレットの追加

次に、簡単なテキストをに追加します HttpServletResponse。 これは、このサーブレットのURLマッピングにアクセスするときに表示されるテキストです。

まず、サーブレットを定義しましょう。

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(
      HttpServletRequest req, 
      HttpServletResponse resp) throws IOException {
 
        resp.setStatus(HttpServletResponse.SC_OK);
        resp.getWriter().write("test");
        resp.getWriter().flush();
        resp.getWriter().close();
    }
}

次に、このサーブレットをTomcatサーバーに追加します。

Class servletClass = MyServlet.class;
Tomcat.addServlet(
  context, servletClass.getSimpleName(), servletClass.getName());
context.addServletMappingDecoded(
  "/my-servlet/*", servletClass.getSimpleName());

3.4. Tomcatコンテキストへのフィルターの追加

次に、フィルターを定義して、Tomcatに追加します。

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // ...
    }

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) 
      throws IOException, ServletException {

        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.addHeader("myHeader", "myHeaderValue");
        chain.doFilter(request, httpResponse);
    }

    @Override
    public void destroy() {
        // ...
    }
}

コンテキストにフィルターを追加するには、もう少し作業が必要です。

Class filterClass = MyFilter.class;
FilterDef myFilterDef = new FilterDef();
myFilterDef.setFilterClass(filterClass.getName());
myFilterDef.setFilterName(filterClass.getSimpleName());
context.addFilterDef(myFilterDef);

FilterMap myFilterMap = new FilterMap();
myFilterMap.setFilterName(filterClass.getSimpleName());
myFilterMap.addURLPattern("/my-servlet/*");
context.addFilterMap(myFilterMap);

この時点で、Tomcatにサーブレットとフィルターを追加する必要があります。

あとは、起動して「テスト」ページを取得し、ログをチェックしてフィルターが機能するかどうかを確認するだけです。

4. Tomcatの起動

これは非常に単純な操作であり、その後、Tomcatが実行されていることを確認する必要があります。

tomcat.start();
tomcat.getServer().await();

開始したら、http:// localhost:8080 / my-servletにアクセスして、テストページを表示できます。

そして、ログを見ると、次のようなものがあります。

これらのログは、Tomcatがポート8080でリッスンを開始し、フィルターが正しく機能していることを示しています。

5. 結論

このチュートリアルでは、Tomcatサーバーの基本的なプログラムによるセットアップについて説明しました。

サーバーを作成、構成、および実行する方法だけでなく、プログラムでサーブレットとフィルターをTomcatコンテキストに追加する方法についても説明しました。

いつものように、完全な実装はGithubにあります。