Java で Web アプリケーションを開発する際は、一般にビルド結果および必要なリソースファイルなどを WAR (Web application ARchive) 形式のファイルにパッケージングします。JAR ファイルと同様に実行可能 WAR を作ることもできますが、通常は Servlet コンテナとよばれるアプリケーションの上で動かします。Servlet コンテナとしては Tomcat が有名です。本ページでは Tomcat で動かすアプリケーションを Eclipse で開発するための基本的な設定方法をまとめます。
Tomcat には Catalina とよばれる Servlet コンテナだけでなく、開発時などを想定して Coyote とよばれる HTTP サーバも内蔵されているため、単体で HTTP リクエストを受けて WAR を利用したレスポンスを返すことができます。Servlet コンテナは必ずしも WAR ファイルの外で提供する必要はなく、Jetty のような軽量な Servlet をアプリケーションに組込むこともできます。
ここでは特に、開発時に使用する Windows および macOS を想定して、Eclipse との連携を意識した Tomcat インストールを行います。Java EE 開発用の Eclipse はインストール済みであるとします。
例えば Tomcat 8.0 をインストールしたい場合は、こちらのページの Core / 32-bit/64-bit Windows Service Installer をダウンロードしてインストールします。
Homebrew を利用します。以下は 2017/04/23 現在の実行結果です。
$ brew info tomcat
tomcat: stable 8.0.35, devel 9.0.0.M6
Implementation of Java Servlet and JavaServer Pages
https://tomcat.apache.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/tomcat.rb
==> Options
--with-fulldocs
Install full documentation locally
--devel
Install development version 9.0.0.M6
$ brew install tomcat
起動して localhost の 8080 にアクセスしてみましょう。
$ catalina start
インストールした Tomcat を Eclipse から操作できるように設定します。
Eclipse 環境設定の Server → Runtime Environments で Add をクリックします。
インストールした Tomcat のバージョンを指定して Next をクリックします。
Tomcat installation directory と JRE を設定して Finish をクリックします。まだ Tomcat をインストールしていない場合は、本ウィンドウで Eclipse 内から Download and Install することもできます。後述の「サーバー」ビュー内でサーバーをダブルクリックして開くと、「サーバー・ロケーション」という項目で Tomcat が存在するフォルダを確認できます。
追加されると一覧に表示されます。
追加したランタイム環境を利用するサーバーを新規追加します。待ち受けるポート番号などを設定します。File → New → Other → Server → Server をクリックします。
Server type 一覧から、インストールした Tomcat のバージョンを選択します。Server's host name はそのままでよく、Server name を適宜変更します。また、Server runtime environment は先程追加したものを選択します。
Finish を押すとサーバーが追加されたことが確認できます。
ポート番号を変更するためには Servers ビュー内の my_server_8080
をダブルクリックします。同じ「Overview」タブ内では、サーバー起動時のタイムアウト時間も既定値の 45 秒から変更できます。パス名を既定値から変更するためには「modules」タブを開いて編集します。
登録したサーバー上で動作させるための Servlet コンテナで動くサンプルアプリケーションを作成します。
File → New → Projects → Web → Dynamic Web Project を選択して Next をクリックします。
Project name に MyWebApp と入力して Next をクリックします。
何も変更せずに Next をクリックします。
Generate web.xml deployment descriptor にチェックを入れて Finish をクリックします。
プロジェクト内で右クリックして New → Servlet をクリックします。
Java package と Class name を入力して Finish をクリックします。
プロジェクトに追加されたことを確認します。
同様に JSP File を追加します。
ファイル名を指定します。
body に適当な文字列を追記します。
追加した Servlet コードの雛形内で使用されているクラスを定義する JAR が参照できないため、初期状態では Problems ビューなどでエラーが確認できます。これを解消するために、インストールした Tomcat の JAR をビルドパスに追加します。個人開発であれば、プロジェクトを右クリックして Properties から追加すればよいです。Java Build Path の Libraries にある Add External JARs をクリックして jsp-api.jar
と servlet-api.jar
を追加します。macOS の場合は事前に Finder で「移動」→「フォルダへ移動」で /usr/local/Cellar/tomcat/8.0.35/libexec
などに移動して、サイドバーに lib をショートカット登録しておくと選択できます。
追加されてエラーが解消したことを確認します。
ただし war ファイルを生成する際などには、上記 JAR 二つは含まれないことに関する警告が出ています。
また、複数人での開発時には、メンバー間で異なるパスに Tomcat をインストールした場合に .classpath
をレポジトリに含めていると不都合が発生することにも注意します。
$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="lib" path="/usr/local/Cellar/tomcat/8.0.35/libexec/lib/jsp-api.jar"/> ← 絶対パス
<classpathentry kind="lib" path="/usr/local/Cellar/tomcat/8.0.35/libexec/lib/servlet-api.jar"/> ← 絶対パス
<classpathentry kind="output" path="build/classes"/>
</classpath>
プロジェクトを右クリックして Run As → Run on Server をクリックします。
my_server_8080
選択して Always use this server when running this project にチェックを入れてから Finish をクリックします。
他のブラウザまたは Eclipse 内の地球儀のアイコンをクリックして URL を適切に入力するとサンプルアプリケーションが動作していることが確認できます。
とりあえず以下の操作で状態を初期化してみます。また、不要なプロジェクトは右クリックして「Close Project」で閉じておきます。ビルド時などにおいて、処理されずに無視されるようになります。
「コンソール」ビュー内のボタンを押すと、ログを閲覧したいサーバーを切り換えることができます。