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

1概要

このクイック記事では、http://tomcat.apache.org/index.html[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>

これはhttps://search.maven.org/classic/#search%7Cga%7C1%7C(g%3A%22org.apache.tomcat%22%20AND%20a%3A%22tomcat-catalina%22)%20ORです。 %20(g%3A%22org.apache.httpcomponents%22%20AND%20a%3A%22httpclient%22)%20OR%20(g%3A%22%22%20AND%20a%3A%22%22)[リンク]プロジェクトでここで使用されている依存関係の最新バージョンを使用して[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にアクセスしてテストページを表示します。

リンク:/uploads/my-servlet-300x77.png%20300w[]

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

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

5結論

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

サーバーの作成、設定、および実行方法、またサーブレットとフィルターをプログラムでTomcatコンテキストに追加する方法も調べました。

いつものように、完全な実装はhttps://github.com/eugenp/tutorials/tree/master/libraries-server[over Github]で見つけることができます。