この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: Tomcatプロジェクトのディレクトリ構成
SEOタイトル: 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 ではダメ