LoginSignup
3

More than 3 years have passed since last update.

EclipseでサーバサイドJavaを作るときのプロジェクトとwarファイルのエクスポート

Last updated at Posted at 2018-12-16

結論から書くと「動的Webプロジェクト」で作るのがよさそう。

※ 調査結果をまとめたものなので確定情報というわけじゃないです。

先日 Eclipseを使ってTomcat+JSP+Servlet+MySQLでメモアプリ作成 と題して、簡単なServlet+JSPのプロジェクトを「Tomcatプロジェクト」で作成したけど、Mavenとの相性とか、プロジェクトの右クリックメニューの[Tomcatプロジェクト]->[プロジェクト設定に従い WAR ファイルをファイルを作成]しても単純にプロジェクト内のファイルを固めたファイルができたりとか、いろいろ微妙な感じだったので、少し調べてみた。

また、Mavenプロジェクトへの変換については、Mavenプロジェクトには推奨のディレクトリ構成があり、その構成変換まではEclipseの変換機能はやってくれないので、Mavenを使用するつもりがあるのであれば、初めからMavenプロジェクトとして作成するのが良いらしい。

プロジェクトの作成

動的Webプロジェクトで作成

Tomcatプロジェクトの作成以外に「動的Webプロジェクト」があり、これを選択する。

image.png

Mavenのmaven-archetype-webappで作成

Mavenを使ってライブラリやビルドの管理をする場合は、「動的Webプロジェクト」でなく、「Mavenプロジェクト」を選択し、「アーキタイプ選択のスキップ」をチェックせずに「maven-archetype-webapp」を指定してプロジェクトを作成する

image.png

image.png

このプロジェクトであれば、Mavenを使える動的Webプロジェクトになる

warファイルの作成

Tomcatプロジェクトの場合

プロジェクトの右クリックメニューの[Tomcatプロジェクト]->[プロジェクト設定に従い WAR ファイルをファイルを作成]からwarファイルを作成できる (※ 事前にプロジェクトプロパティのTomcatの設定の「WARエクスポート設定」を入力しておく

image.png

image.png

ただし、このwarファイル作成だと、外部のjarファイル(JDBCとか)などが、ビルドパスのエクスポート設定とか行っても含まれなかったし、最初に書いた通り.settingsディレクトリとか、余計なものまで含まれており、とても微妙。(Tomcatへデプロイすれば動くことは動く)
外部jarをプロジェクトの構成内(/WEB-INF/lib/***.jarとか)に含めていればwarファイルには含まれる(が、その場合はmavenプロジェクト化した場合と二重管理になるような気が)

通常メニューの[エクスポート]はできない。(対象プロジェクトに含まれない)

動的Webプロジェクトの場合

※ Mavenプロジェクト(maven-archetype-webapp)も同様

Eclipse的にはTomcatプロジェクトではないため、Tomcatメニューからの作成はできない(メニューがない)。ただし、通常メニューの[ファイル(F)]->[エクスポート(O)]からwar形式のエクスポートが可能。

image.png

image.png

ここで、宛先(warファイルの保存先)を[参照]ボタン押下から適当に設定し、[完了]押下でwarファイルが作成される。
Mavenのmaven-archetype-webapp指定プロジェクトの場合は、Mavenで導入したJDBCとかの外部ライブラリも含めてwarファイルにエクスポートしてくれる。
動的Webプロジェクトの場合は、Tomcatプロジェクトのwarファイルと同様にプロジェクト構成内のファイルのみとなっている(プロジェクトの外部にあるファイルを参照している場合はwarファイルに含まれない)

Servletクラスの新規作成

Tomcatプロジェクトの場合

新規作成メニューの「サーブレット」の作成が使えないので「クラス」の作成から作る

動的Webプロジェクトの場合

新規作成メニューの「サーブレット」から作成する

image.png

image.png

URLマッピング(ソースの@WebServletアノテーションに相当)の指定

image.png

また、ソースファイル作成時にどのメソッドをoverrideしておくかも選択できる。

image.png

出力されるソース

ExampleServlet.java
package jp.example.www;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MainServlet
 */
@WebServlet(description = "メイン画面", urlPatterns = { "/" })
public class MainServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MainServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

maven-archetype-webappの場合

.javaファイルについては動的Webプロジェクトの場合と同じ。
このプロジェクトだとsrc/main/webapp/WEB-INF/web.xmlにURLマッピングやdescriptionのメタ情報が記述されており、新規作成の「サーブレット」のメニューからであれば、自動で更新してくれる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3