ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?