プログラムによるTomcatサーバーの作成、設定、および実行

Tomcatサーバーをプログラムで作成、構成、実行する

1. 概要

この簡単な記事では、Tomcat serverをプログラムで作成、構成、および実行します。

2. セットアップ

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


    
        org.apache.tomcat
        tomcat-catalina
        ${tomcat.version}
    
    
        org.apache.httpcomponents
        httpclient
        ${apache.httpclient}
    
    
        junit
        junit
        ${junit.version}
        test
    

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

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に移動してテストページを表示できます。

image

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

image

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

5. 結論

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

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

いつものように、完全な実装はover on Githubで見つけることができます。