ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?