ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
struts-config.xml の役割
Struts 1 は MVC フレームワークで、リクエスト → Action → JSP の流れを struts-config.xml で宣言的に定義します。Struts 2 とは構成が大きく異なるので注意(こちらは struts.xml)。
Struts 1 のサポートは2013 年で終了しており、セキュリティ脆弱性も多数。新規開発では使わず、既存システムの保守用に必要な範囲で理解します。
全体構造
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 1. データソース定義 -->
<data-sources>
<data-source key="myDataSource" type="...">
...
</data-source>
</data-sources>
<!-- 2. フォーム Bean 定義 -->
<form-beans>
<form-bean name="loginForm" type="com.example.LoginForm"/>
<form-bean name="userForm" type="com.example.UserForm"/>
</form-beans>
<!-- 3. グローバル例外定義 -->
<global-exceptions>
<exception key="error.system" type="java.lang.Exception" path="/error.jsp"/>
</global-exceptions>
<!-- 4. グローバル転送先 -->
<global-forwards>
<forward name="login" path="/login.jsp"/>
<forward name="error" path="/error.jsp"/>
</global-forwards>
<!-- 5. Action マッピング (★中心) -->
<action-mappings>
<action path="/login"
type="com.example.LoginAction"
name="loginForm"
scope="request"
validate="true"
input="/login.jsp">
<forward name="success" path="/home.jsp"/>
<forward name="failure" path="/login.jsp"/>
</action>
</action-mappings>
<!-- 6. メッセージリソース -->
<message-resources parameter="ApplicationResources"/>
<!-- 7. プラグイン (Validator 等) -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
各要素の役割
① form-beans(フォーム Bean)
HTML フォームのデータを受け取るクラス:
<form-beans>
<form-bean name="userForm" type="com.example.UserForm"/>
</form-beans>
// com.example.UserForm.java
public class UserForm extends ActionForm {
private String name;
private String email;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (name == null || name.isEmpty()) {
errors.add("name", new ActionMessage("error.name.required"));
}
return errors;
}
}
② action-mappings(Action 定義)
URL → Action(コントローラ)の紐付け:
| 属性 | 意味 |
|---|---|
path | リクエストパス(/login) |
type | Action クラスの FQDN |
name | 使用する form-bean 名 |
scope | request / session |
validate | true なら form-bean の validate() を呼ぶ |
input | validate 失敗時の戻り先 |
parameter | DispatchAction 等で使うメソッド名指定 |
<action path="/userSave"
type="com.example.UserSaveAction"
name="userForm"
scope="request"
validate="true"
input="/userEdit.jsp">
<forward name="success" path="/userList.jsp"/>
<forward name="failure" path="/userEdit.jsp"/>
</action>
// com.example.UserSaveAction.java
public class UserSaveAction extends Action {
@Override
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
UserForm userForm = (UserForm) form;
try {
userService.save(userForm.getName(), userForm.getEmail());
return mapping.findForward("success");
} catch (Exception e) {
return mapping.findForward("failure");
}
}
}
③ forward(遷移先)
名前と JSP パスの対応:
<!-- グローバル (全アクション共通) -->
<global-forwards>
<forward name="error" path="/error.jsp"/>
</global-forwards>
<!-- アクション固有 -->
<action path="/login" ...>
<forward name="success" path="/home.jsp"/>
<forward name="failure" path="/login.jsp" redirect="true"/>
</action>
④ message-resources(メッセージ)
<message-resources parameter="ApplicationResources"/>
<!-- ApplicationResources_ja.properties -->
error.name.required=名前は必須です
welcome.message=ようこそ、{0} さん
典型的なリクエストの流れ
- ユーザが
/login.doにアクセス - ActionServlet がリクエストを受信
- struts-config.xml の action-mappings から
/loginを検索 - form-bean
loginFormを生成してパラメータをバインド validate=trueなら form の validate() メソッド呼び出し- エラーあり → input 属性の JSP に戻る
- エラーなし → Action クラスの
execute()実行 - execute() が ActionForward を返す(例: success)
- 該当する forward の path(JSP)に遷移
Struts 1 vs Spring MVC(モダン)
| 項目 | Struts 1 | Spring MVC |
|---|---|---|
| 設定 | XML 中心 | アノテーション中心 |
| コントローラ | Action クラス | @Controller / @RestController |
| フォームバインド | ActionForm 継承 | POJO + @ModelAttribute |
| バリデーション | validate() メソッド | Bean Validation (@Valid) |
| テスト | 困難 | 容易(POJO ベース) |
| DI | 限定的 | 強力 |
| サポート | 2013 終了 | アクティブ |
レガシー保守の注意点
- セキュリティパッチ: Struts 1 は提供されない。脆弱性報告(CVE)を確認
- Java バージョン: Struts 1 は古い Java 向けで、Java 17+ では動作しない場合あり
- 移行計画: Spring MVC / Spring Boot へのリプレースを段階的に
- テスト不足: 単体テストが書きづらい設計、リファクタリング前にテスト追加
関連記事
📚 関連: ファイル形式・拡張子セクション — 主要なファイル拡張子・形式を体系的に解説。XML(.xml)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
同階層のページ
- 導入方法
- struts-config.xmlの説明
- ActionForm
- Action
- エラー一覧
- JSP タグ
- カスタムタグ(tablib)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?