📘 Vol.4：Struts2とMavenの基礎と設定ファイルの役割


## 🎯 本記事の目的

本記事では、Struts2フレームワークとMavenを中心に、掲示板アプリ開発の基盤となる仕組みについて説明します。

Vol.4で紹介した詳細設計を元に、  
- なぜこの技術を使うのか？  
- 構成ファイルがどのように機能しているのか？  

について理解を深めていきます。

---

## 🏗 Struts2とは？

Struts2は、JavaでWebアプリケーションを開発するためのMVCフレームワークです。

MVCモデルは、以下のように役割を分離することで保守性・拡張性を高めます：

- **Model（業務ロジック）**
- **View（画面表示）**
- **Controller（制御）**

---

## 🔧 主な構成ファイル

### `web.xml`
- Webアプリのエントリーポイント
- Struts2の`FilterDispatcher`（現`StrutsPrepareAndExecuteFilter`）を設定

### `struts.xml`
- Struts2の中核設定ファイル
- 各アクション（Actionクラス）と画面（JSP）とのマッピングを定義

### `struts.properties`（任意）
- `struts.xml`で指定できない細かい設定を記述
- 多くのプロジェクトでは未使用

---

## ⚙️ Struts2における制御の流れ

1. 画面（JSP）からのリクエスト
2. Actionクラスに制御が移る
3. 業務ロジックを処理
4. 処理結果に応じてJSPにフォワード

このように、Struts2はMVCアーキテクチャをベースに設計されています。

---

## 📦 Mavenとは？

Mavenは、Javaプロジェクトにおけるビルドツール兼ライブラリ管理ツールです。

主な役割：
- **依存ライブラリの自動管理**
- **ビルド処理の自動化**
- **環境の統一**

---

## ✅ Mavenを利用する理由

- `pom.xml`に依存関係を記述するだけで自動でダウンロード＆設定
- WARファイル作成やコンパイルも簡単
- チーム開発において環境構築が容易になる

---

## 📂 pom.xmlの役割

- Struts2などの必要なライブラリを依存関係として定義
- Javaのコンパイルバージョン、WARファイルの出力などを設定
- ビルド時のプラグインを定義

---

## 📝 pom.xmlの記述例（Struts2関連抜粋）

```xml
<dependencies>
  <!-- Struts2 本体 -->
  <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.26</version>
  </dependency>

  <!-- JSPやServlet API（providedスコープ） -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

<build>
  <plugins>
    <!-- Javaコンパイル設定 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>

    <!-- WARファイル作成 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.3.1</version>
    </plugin>
  </plugins>
</build>
```

---
## 🧰 Struts2 × Maven 連携のポイント
- pom.xmlにStruts2関連の依存関係を記述するだけでOK

- 手動でJARをダウンロード＆配置する手間は不要

- mvn packageで簡単にWARファイルを生成できる

- WARファイルをTomcatのwebappsに配置すればすぐに起動可能

- src/main/resources/struts.xml にStrutsのルーティング設定を記述
---

## 🗂 Mavenの標準ディレクトリ構成
project-root/
├── src/
│   ├── main/
│   │   ├── java/               # Javaコード（Actionクラスなど）
│   │   ├── resources/          # 設定ファイル（struts.xmlなど）
│   │   └── webapp/             # Webリソース（JSP, HTML, CSSなど）
│   │       └── WEB-INF/
│   │           └── web.xml     # Webアプリの設定ファイル
├── target/                     # Mavenのビルド成果物（WARなど）
└── pom.xml                     # プロジェクト構成ファイル

---


✅ まとめ
| 項目      | 説明                                    |
| ------- | ------------------------------------- |
| Struts2 | JavaのMVC Webフレームワーク。業務ロジック、画面、制御を分離   |
| Maven   | 依存管理とビルドを自動化し、開発効率と環境統一を支援            |
| 構成ファイル  | `web.xml`, `struts.xml`, `pom.xml`が中心 |
| 推奨構成    | Maven標準ディレクトリ構成を守るとビルドと管理がスムーズ        |


---

## 📎 補足資料リンク

- 📎 補足資料リンク  
📄 [掲示板アプリケーション環境構築手順書（PDF）](https://github.com/juehara-crypto/Portfolio_Bulletinboard/blob/master/%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86%E6%9B%B8.pdf)



---
▶️ 次回 [Vol.5 環境構築編：掲示板アプリケーションの実行準備](https://qiita.com/juehara-crypto/items/7010ae45d35174d3a3a6)


---

## 🧭 Vol.1〜7 関連リンク

| 回 | タイトル | 主な内容 |
|----|----------|-----------|
| Vol.1 | [プログラミングとの再会 – 「画面ありき」で変わった学び方](https://qiita.com/juehara-crypto/items/2fcc53d765dcc25a4fa3) | プログラミング再入門と、**画面駆動の学習法**というユニークなアプローチの紹介。最初に「画面」から考えることでモチベーションを継続。 |
| Vol.2 | [画面駆動設計に基づく設計書の具体例：画面フローからUI設計・処理定義まで](https://qiita.com/juehara-crypto/items/c1fd34b3031b13160f27) | 実際に描いた**画面遷移図・UI設計・処理定義書**を公開し、画面中心の設計手法を解説。 |
| Vol.3 | [詳細設計編：ER図で見るデータ構造と実装の土台](https://qiita.com/juehara-crypto/items/6e6431954dc99ea59054) | 実装前提で設計された **ER図（Entity Relationship 図）** をもとに、データ構造と整合性を設計。 |
| Vol.5 | [環境構築編：掲示板アプリケーションの実行準備](https://qiita.com/juehara-crypto/items/7010ae45d35174d3a3a6) | TomcatとEclipseでの動作環境構築。 |
| Vol.6 | [BaseActionクラスの詳細解説【Struts2の要】](https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06) | すべてのアクションに共通する基底クラス **BaseAction** を定義し、ログ出力や共通処理を集約。 |
| Vol.6.1 | [BaseAction の活用例【共通基底クラスでセッション管理を簡素化】](https://qiita.com/juehara-crypto/items/f4efded5b26e39e49928) | BaseAction を継承する具体的なアクション例を紹介し、セッションやログ処理の統合例を実践。 |
| Vol.7 | [Struts2 における MVC モデルの全体像](https://qiita.com/juehara-crypto/items/761c0b13ed1a5f896bba) | Model-View-Controller の各要素が Struts2 でどう分担されるかを体系的に解説。 |
| Vol.7.1 | [Struts2 における Model（モデル）について](https://qiita.com/juehara-crypto/items/14f7f154caf29447ae93) | JavaBeansベースのModelクラス（User, Thread, Post など）設計とその役割を明確化。 |
| Vol.7.2 | [Struts2 における Controller（コントローラ）の責務](https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba) | Actionクラスを軸に、入力処理・分岐処理・画面遷移の中核を担うControllerの実装指針を提示。 |
| Vol.7.3 | [Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61) | URLマッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。 |
| Vol.7.4 | [struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044) | namespaceの活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |

---