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に移動してテストページを表示できます。
ログを見ると、次のようなものがあります。
これらのログは、Tomcatがポート8080でリッスンを開始したことと、フィルターが正しく機能していることを示しています。
5. 結論
このチュートリアルでは、Tomcatサーバーの基本的なプログラムによるセットアップを行いました。
サーバーを作成、構成、実行する方法だけでなく、サーブレットとフィルターをTomcatコンテキストにプログラムで追加する方法も検討しました。
いつものように、完全な実装はover on Githubで見つけることができます。