ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
struts-bean.tld とは
Struts 1 系が提供する JSP カスタムタグライブラリの 1 つで、JavaBean のプロパティ表示・国際化メッセージ・各種 HTTP 情報の取得を JSP 上で簡潔に書くために用意されました。WEB-INF/lib/struts.jar 内に META-INF/tlds/struts-bean.tld として同梱され、TLD 定義により <bean:xxx> 形式で呼び出します。
同じ Struts 1 系には他に struts-html.tld(HTML フォーム生成)、struts-logic.tld(条件分岐・反復)、struts-nested.tld(ネストプロパティ)が存在します。bean タグは値出力系を担います。
宣言と使い方
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%-- プロパティ値を出力 --%>
<bean:write name="userForm" property="name" />
<%-- メッセージリソースから国際化メッセージ --%>
<bean:message key="welcome.title" />
<%-- リクエストパラメータ --%>
<bean:parameter id="q" name="keyword" />
検索キーワード: <%= q %>
主要タグ一覧
| タグ | 役割 | 主な属性 |
|---|---|---|
<bean:write> | JavaBean プロパティを HTML エスケープして出力 | name / property / filter / format |
<bean:message> | ApplicationResources からメッセージ取得 (国際化) | key / arg0..arg4 / bundle |
<bean:define> | スクリプティング変数として変数を定義 | id / name / value / scope |
<bean:include> | 指定 URL の応答内容を文字列として取り込み | id / page / href / forward |
<bean:cookie> | リクエストの Cookie を取得 | id / name / value / multiple |
<bean:header> | リクエストヘッダー取得 | id / name / value |
<bean:parameter> | リクエストパラメータ取得 | id / name / value / multiple |
<bean:page> | JSP 暗黙オブジェクト (request / response / session 等) を変数化 | id / property |
<bean:resource> | Web アプリのリソースを読み込み | id / name / input |
<bean:size> | Collection / Map / 配列の要素数 | id / name / property |
<bean:struts> | Struts の設定オブジェクト (FormBean 定義等) を変数化 | id / formBean / forward / mapping |
典型的なサンプル
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<html:html>
<head><title><bean:message key="page.title" /></title></head>
<body>
<h1><bean:message key="welcome.user" arg0="<%= request.getRemoteUser() %>" /></h1>
<%-- フォーム値出力 (XSS 対策で filter=true がデフォルト) --%>
ユーザー名: <bean:write name="userForm" property="name" /><br />
登録日: <bean:write name="userForm" property="registeredAt"
format="yyyy/MM/dd" /><br />
<%-- 一覧件数表示 --%>
ヒット件数: <bean:size id="hits" name="searchResults" /><%= hits %>件
<%-- 別ページの内容を取り込み --%>
<bean:include id="footer" page="/footer.jsp" />
<%= footer %>
</body>
</html:html>
ApplicationResources.properties (国際化)
# /WEB-INF/classes/ApplicationResources.properties (デフォルト言語)
page.title=メンバー一覧
welcome.user={0} さん、ようこそ
errors.required={0} は必須です
# /WEB-INF/classes/ApplicationResources_en.properties (英語)
page.title=Member List
welcome.user=Welcome, {0}
errors.required={0} is required.
struts-config.xml で <message-resources parameter="ApplicationResources" /> と宣言しておくと、<bean:message key="..." /> でロケールに応じて自動切替されます。
bean:write のセキュリティ属性
| 属性 | 意味 | 推奨 |
|---|---|---|
| filter | HTML 特殊文字をエスケープ ( デフォルト true ) | 必ず true (省略)。false にすると XSS リスク |
| format | SimpleDateFormat / DecimalFormat パターン | 日付・数値表示に |
| ignore | name のビーンが見つからないときエラーを抑制 | 必須ビーンには false |
Struts 1.x が EOL である事実
Apache Struts プロジェクトは 2013 年 4 月 5 日付で Struts 1.x の EOL (End of Life) を宣言しており、以後セキュリティパッチも公式リリースされていません。サポート対象は Struts 2.x(こちらも CVE-2017-5638 = Equifax 事件など重大脆弱性が頻発)と、後継の Apache Struts プロジェクトのみです。
- 2013-04-05 Struts 1 EOL 宣言
- 2014-04-22 Struts 1.3.10 系で発見された CVE-2014-0114 (ClassLoader 経由 RCE) — 1.x には公式パッチ無し
- 2024 現在も commons-beanutils 経由の脆弱性が残存している環境が多い
Spring MVC + Thymeleaf への移行マッピング
| Struts 1 (bean タグ) | Spring MVC + Thymeleaf |
|---|---|
<bean:write name="form" property="name" /> | <span th:text="${form.name}"></span> |
<bean:message key="welcome" /> | <span th:text="#{welcome}"></span> |
<bean:define id="x" value="..." /> | th:with="x=..." |
<bean:include page="/foo.jsp" /> | th:insert="~{foo :: fragment}" |
<bean:parameter id="q" name="keyword"/> | Controller の @RequestParam |
<bean:cookie id="t" name="token"/> | Controller の @CookieValue |
<bean:size id="n" name="list"/> | ${#lists.size(list)} |
移行が現実的でない場合の暫定策
- WAF (Web Application Firewall) で攻撃シグネチャをブロック
- commons-beanutils を 1.9.4 以降に手動アップグレード
- 外部から到達不能な閉域網に閉じ込める
- 新規機能開発を止め、リプレース計画と並走させる
FAQ
Q: bean:write の filter="false" は何のため?
A: 既に HTML を含む値 (リッチエディタ出力など) をそのまま出したいとき。サニタイズ済の信頼できる値のみに限定し、生のユーザー入力は絶対に false にしない。
Q: Struts 1 のまま使い続けて大丈夫?
A: イントラ・閉域なら短期延命は可能ですが、公開システムでは廃止が原則。CVE 修正が止まっている時点でコンプライアンス上もリスク。
Q: 移行コストを下げる方法は?
A: JSP → Thymeleaf 変換は機械的に可能な部分が多い。Action クラス → @Controller は手作業中心だが、ActionForm → @ModelAttribute はマッピングが直感的。段階的に URI 単位で移すストラングラーパターンが定石。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
同階層のページはありません
人気ページ
- 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
コメントを削除してもよろしいでしょうか?