このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
通常のタグの代わりに HTML タグライブラリを使った場合、
どのような処理が行われているのか確認してみよう。
以下は、/WEB-INF/pages/login.jsp での処理の流れだ。
/WEB-INF/pages/login.jsp は直接アクセスできないため、
必ず他の Action 等から呼び出される形になる。
[ActionServlet]
1. 利用者が、/index.do にアクセスし、
それが Struts の ActionServlet に渡される。
2. 設定ファイルより、/index.do の <action> を検索する。
3. 設定に従い、/WEB-INF/pages/login.jsp に転送する。
[JSP]
4. 転送により /WEB-INF/pages/login.jsp が呼び出される。
5. page や taglib ディレクティブを処理する。
6. ページを上から順に処理をしていく。
タグライブラリのタグが見つかると、
そのタグに対応するクラスを呼び出して処理を行う。
それ以外は、タグも含めてそのまま書き出す
7. <html:html xhtml="true"> を展開する。
例: <html xmlns="http://www.w3.org/1999/xhtml"
lang="ja" xml:lang="ja">
8. <html:messages id="msg"> を展開する。
ActionErrors が存在した場合、
そこからメッセージを取り出して
id 属性で指定された名前のページ属性に格納しながら、
要素内容を繰り返し処理する。
この場合、このタグ自身は何も書き出さない。
9. <bean:write name="msg" /> を展開する。
このタグは、メッセージの数と同じ回数展開される。
例: パスワードを入力してください。
10. </html:messages> タグを展開する。(終了タグ)
この場合、このタグは何も書き出さない。
11. <html:form action="/login" ~> を展開する。
例: <form id="loginForm" method="post"
action="/struts-test/login.do"
style="line-height: 2">
11.1 action 属性で指定されたパスに対応した、
<action path="/login"> を設定ファイルから検索する。
11.2. name 属性に従い LoginForm のインスタンスを得て、
それを「現在のフォーム」として記憶しておく。
フォームのインスタンスは、フォームの名前である、
「loginForm」というセッション属性から取り出すが、
もしまだ LoginForm インスタンスが存在しなければ、
新しい LoginForm インスタンスを作成して、
それを初期化するため reset メソッドを呼び出し、
最後に「loginForm」セッション属性に登録する。
12. <html:text property="user" /> を展開する。
property 属性値が user なので、
フォームの getUser() を呼び出して現在値を取得し、
その値を value 属性に持つ <input> タグを書き出す。
例: <input type="text" name="user" value="guest" />
13. <html:password property="password" ~/> を展開する。
property 属性値が password だが、
redisplay 属性値が false のため現在値は取得されず、
空の値を value 属性に持つ <input> タグを書き出す。
例: <input type="password" name="password" value="" />
14. <html:checkbox property="persistent" /> を展開する。
property 属性値が persistent なので、
フォームの getPersistent() を呼び出して、
現在のチェック状態を取得し、true ならば、
checked 属性が指定された <input> タグを書き出す。
今回はチェックボックスを boolean として扱うため、
html:checkbox の value 属性は省略したが、
この場合出力する <input> の value 属性は on となる。
例: <input type="checkbox" name="persistent"
value="on" checked="checked" />
15. <html:submit>ログイン</html:submit> を展開する。
property 属性がないため、単なる送信ボタンとなる。
要素の中身は、ボタンのラベルとして利用され、
出力される <input> の value 属性として設定される。
例: <input type="submit" value="ログイン" />
16. </html:form> を展開する。(終了タグ)
例: </form>
17. </html:html> を展開する。(終了タグ)
例: </html>
長くなったが、以上のような流れとなっている。
タグライブラリのタグは、一見普通のタグに見えるのだが、
裏でライブラリのコードが動いており、
HTML を生成したり処理を実行したりしている。
ここでは <html:text> や <html:password> 等の
単純なものしか使わなかったが、
HTML ライブラリには他にも強力なタグがある。
<html:form> と中心とする、いわゆるフォーム系タグは、
Struts との連携を意識して作られており、
ActionForm の表示・編集を行うための、
UI パーツとしての役割が強いのだ。