質問: 質問内容 ---- 初歩的な質問ばかりなのですが、struts2の主にsタグについて、ECサイトにおけるsessionの使用頻度について、計3項目確認をさせてください。 (各教材の写経でsタグを使う意図が見えない箇所がちらほら見られた為、確認をしております。) ###### [1]sタグとhtmlタグの差別化について sタグの内、htmlタグに対応するものについては、sタグ独自の属性を使用しないのであれば、最終的な生成物(html)としてはhtmlタグで書くのと差異が無い為、htmlタグで記述するべきである? (下記例のような場合、わざわざsタグを使用する必要はない) ``` ### jsp(sタグ使用の場合) URL ``` ``` ### jsp(htmlタグのみの場合) URL ``` ###### [2]s:setタグやs:pushタグについて これらのタグの利用価値がわかりません。 jspのコンパイルタイミングを考えると、Action側でValueStackやスコープに値を登録をする事と何が違うのかわかりません。jspで書かなくて済むならActionクラス側で記述するべきではないのでしょうか? ##### [3]session(SessionAwareインターフェース)の使用について 一般的なショッピングサイトで考えた場合、初心者考えだと何でもかんでもデータをsessionに入れて、各画面遷移先で使用したくなるのですが、sessionを保持しているサーバー側の事を考えると、ログイン情報など必要最低限のデータ格納にするべきかと思います。ただ、カート情報や、履歴等に頻繁にアクセスする場合、sessionにデータを格納しないとしたら、毎度DBにアクセスする事になりますが、それも無駄な気がします。 実用では、DBへの頻繁なアクセスとsessionの肥大化を比較した場合、どちらに重きを置くのが一般的なのでしょうか? そもそも他にもっと良い方法があるだろ!という事であれば、是非ともご教授ください。
回答: [1] Strutsタグ(sタグ)は、HTMLの要素を出力させる以外にもテンプレートに従ったレイアウト+タグを生成しつつ出力する機能があります。ただしデフォルトのテンプレートが余計なタグを生み出してしまうため、simpleテーマを指定するのが現状でしょうか。 [2] 特定のタグに渡すための一時変数を格納する目的で使います。例えばタグ内でループ処理を書く際に、事前にActionクラスないしはJavaクラス内であらかじめすべての属性を生成しておく手もありますが、出力されるHTML/JSPにあわせてJavaクラス側で生成せず、一時変数をJSP内だけで保管して順次出力するのに使います。 [3] 一時的に保存しておきたい情報をHttpSessionへ格納するのか、ストレージへ格納するのかは、設計で判断するところです。利用される同時ユーザー数、一時保存しておきたい情報の量をあらかじめサイジングして、提供するアプリケーションにあわせて検討します。 個人的には、HttpSessionに格納するのはおっしゃる通りログイン情報など常に保存する内容くらいの少量にしておき、それでも数イベント内だけで保存しておきたい情報がある場合は、確実に破棄できるようHttpSessionを操作するためのルール作りをします。