◀ 4.

Eclipse + Tomcat 動的 Web プロジェクトのディレクトリ構成|WEB-INF / Maven 標準

▶
この記事の要点
  • Eclipse + Tomcat プロジェクトの標準ディレクトリ構造
  • WEB-INF/src: Java ソース(Servlet / Filter 等)
  • WEB-INF/classes: コンパイル済 .class(Eclipse が自動生成)
  • WEB-INF/lib: 依存 jar(実行時にクラスパスに加わる)
  • WEB-INF/web.xml: デプロイ記述子(Servlet マッピング等)
  • Maven プロジェクトでは src/main/java / src/main/webapp 構造が標準

Eclipse 動的 Web プロジェクトの構造

Eclipse で「動的 Web プロジェクト」を新規作成すると、以下の構造になります(古い形式 / 一般的):

MyProject/
├── src/                    ← Java ソース(パッケージ別)
│   └── com/example/
│       └── MyServlet.java
├── WebContent/             ← (または webapp/) Web リソース
│   ├── META-INF/
│   │   └── MANIFEST.MF
│   ├── WEB-INF/            ← Web アプリケーション設定
│   │   ├── web.xml         ← デプロイ記述子
│   │   ├── classes/        ← コンパイル済 .class (自動生成)
│   │   └── lib/            ← 依存 jar
│   ├── index.jsp
│   ├── css/
│   ├── js/
│   └── images/
├── build/                  ← ビルド成果物 (gitignore)
├── .classpath              ← Eclipse 設定(PATH や依存ライブラリ)
├── .project                ← Eclipse プロジェクト定義
└── .settings/              ← その他 Eclipse 設定

各ディレクトリの役割

src/

Java ソースを配置。パッケージ階層に対応した深いディレクトリ構造が必要です:

src/
└── com/
    └── example/
        ├── controllers/
        │   └── UserController.java   ← package com.example.controllers
        ├── filters/
        │   └── AuthFilter.java       ← package com.example.filters
        └── models/
            └── User.java             ← package com.example.models

WEB-INF/

外部から直接 URL アクセスできない領域。重要設定ファイル・コンパイル済みクラス・依存ライブラリ等を置きます:

パス役割
WEB-INF/web.xmlデプロイ記述子。Servlet マッピング、Filter、context-param など
WEB-INF/classes/コンパイル済 .class(Eclipse が src からビルド時にコピー)
WEB-INF/lib/依存ライブラリ jar(実行時クラスパスに自動追加)
WEB-INF/views/ などJSP ファイルを外部直アクセスから守るための慣習配置
WEB-INF/spring/Spring 設定 XML(applicationContext.xml 等)

web.xml の最小例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                        http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <display-name>MyProject</display-name>

    <!-- Servlet 定義 -->
    <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.example.controllers.UserController</servlet-class>
    </servlet>

    <!-- URL マッピング -->
    <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <url-pattern>/users/*</url-pattern>
    </servlet-mapping>

    <!-- 文字コード Filter -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- ウェルカムファイル -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Maven プロジェクトの標準ディレクトリ構成

近年は Maven プロジェクト形式が主流。Eclipse 動的 Web プロジェクトとはレイアウトが異なります:

MyProject/
├── src/
│   ├── main/
│   │   ├── java/                     ← Java ソース
│   │   │   └── com/example/
│   │   │       └── MyApplication.java
│   │   ├── resources/                ← 設定ファイル
│   │   │   ├── application.properties
│   │   │   ├── mybatis-config.xml
│   │   │   └── log4j2.xml
│   │   └── webapp/                   ← (旧形式) static + WEB-INF
│   │       ├── WEB-INF/
│   │       │   ├── web.xml
│   │       │   └── views/
│   │       │       └── home.jsp
│   │       └── static/
│   │           ├── css/
│   │           └── js/
│   └── test/
│       ├── java/                     ← テストコード
│       │   └── com/example/
│       │       └── MyApplicationTest.java
│       └── resources/                ← テスト時のみの設定
├── pom.xml                           ← Maven 設定
└── target/                           ← ビルド成果物 (gitignore)
    ├── classes/                      ← コンパイル済
    ├── MyProject.war                 ← パッケージング成果物
    └── ...

Maven レイアウトの利点

  • 規約優先: ディレクトリ構造を考えなくて良い
  • 依存管理が pom.xml で自動: WEB-INF/lib に手動コピー不要
  • テスト分離: src/test と src/main で明確に分かれる
  • IDE 連携: Eclipse / IntelliJ / VS Code すべてが Maven 標準レイアウトを認識
  • CI/CD: mvn package 1 つで成果物生成

Spring Boot のディレクトリ構成

Spring Boot は WAR ではなく実行可能 jar形式が主流で、内蔵 Tomcat を使うため WEB-INF は不要:

my-spring-boot-app/
├── src/main/
│   ├── java/
│   │   └── com/example/
│   │       ├── MyApplication.java
│   │       ├── controllers/
│   │       └── services/
│   ├── resources/
│   │   ├── application.properties
│   │   ├── static/                ← 静的リソース(公開)
│   │   │   ├── css/
│   │   │   └── js/
│   │   ├── templates/             ← Thymeleaf テンプレート
│   │   │   └── home.html
│   │   └── public/                ← 静的 (static と類似)
├── pom.xml
└── target/
    └── my-spring-boot-app.jar     ← 単独実行可能 jar

クラスパスの読み込み順序

Tomcat が起動して Web アプリケーションがロードされるとき、クラスは以下の順で検索されます:

  1. WEB-INF/classes/ 配下の .class(自プロジェクト)
  2. WEB-INF/lib/ 配下の jar(自プロジェクトの依存)
  3. Tomcat 共通: $CATALINA_HOME/lib/ の jar
  4. JDK 標準: rt.jar / Java 9+ では module 経由

同じクラス名があった場合、上の方が優先されます(クラスローダ階層の上書き)。

注意点

  • WEB-INF/lib に jar を手動コピーは古いやり方 → Maven / Gradle 推奨
  • WEB-INF 配下は外部から直接アクセスできないので JSP テンプレートを置くのが定石
  • build/ や target/ は .gitignore へ
  • .classpath / .project は議論あり — チームで Eclipse 統一なら commit、それ以外は除外
  • WEB-INF 大文字は固定。Linux サーバでは大小区別されるため web-inf ではダメ
子ページ

子ページはありません

同階層のページ
  1. Pleades導入方法(Windows)
  2. Tomcatの起動ボタンを表示
  3. 色・テーマの変更
  4. Tomcatプロジェクトのディレクトリ構成
  5. プロジェクトをTomcatプロジェクトとして認識させる方法
  6. Webアプリケーションのデプロイ方法
  7. 便利ショートカット一覧
  8. エラー一覧
  9. サーバーの設定
  10. サーバーとプロジェクトの紐づけ
  11. Tomcatの起動時のログがconsole上に表示されない時の対応
  12. macOSで複数のワークスペースを起動させる方法

最近更新/作成されたページ