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 の最小例




    MyProject

    
    
        UserServlet
        com.example.controllers.UserController
    

    
    
        UserServlet
        /users/*
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    

    
    
        index.jsp
    

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 ではダメ
編集
Post Share
子ページ

子ページはありません

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