質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

Struts2のsタグについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,557

kane5111

score 70

質問内容

初歩的な質問ばかりなのですが、struts2の主にsタグについて、ECサイトにおけるsessionの使用頻度について、計3項目確認をさせてください。
(各教材の写経でsタグを使う意図が見えない箇所がちらほら見られた為、確認をしております。)

[1]sタグとhtmlタグの差別化について

sタグの内、htmlタグに対応するものについては、sタグ独自の属性を使用しないのであれば、最終的な生成物(html)としてはhtmlタグで書くのと差異が無い為、htmlタグで記述するべきである?
(下記例のような場合、わざわざsタグを使用する必要はない)

### jsp(sタグ使用の場合)

<s:form action="HomeAction">
<s:submit value="ホーム画面へ"/>
</s:form>
<s:a href="URL">URL</a>
### jsp(htmlタグのみの場合)

<form action="HomeAction">
<input type="submit" value="ホーム画面へ"/>
</form>
<a href="URL">URL</a>
[2]s:setタグやs:pushタグについて

これらのタグの利用価値がわかりません。
jspのコンパイルタイミングを考えると、Action側でValueStackやスコープに値を登録をする事と何が違うのかわかりません。jspで書かなくて済むならActionクラス側で記述するべきではないのでしょうか?

[3]session(SessionAwareインターフェース)の使用について

一般的なショッピングサイトで考えた場合、初心者考えだと何でもかんでもデータをsessionに入れて、各画面遷移先で使用したくなるのですが、sessionを保持しているサーバー側の事を考えると、ログイン情報など必要最低限のデータ格納にするべきかと思います。ただ、カート情報や、履歴等に頻繁にアクセスする場合、sessionにデータを格納しないとしたら、毎度DBにアクセスする事になりますが、それも無駄な気がします。
実用では、DBへの頻繁なアクセスとsessionの肥大化を比較した場合、どちらに重きを置くのが一般的なのでしょうか?
そもそも他にもっと良い方法があるだろ!という事であれば、是非ともご教授ください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

[1] Strutsタグ(sタグ)は、HTMLの要素を出力させる以外にもテンプレートに従ったレイアウト+タグを生成しつつ出力する機能があります。ただしデフォルトのテンプレートが余計なタグを生み出してしまうため、simpleテーマを指定するのが現状でしょうか。

[2] 特定のタグに渡すための一時変数を格納する目的で使います。例えばタグ内でループ処理を書く際に、事前にActionクラスないしはJavaクラス内であらかじめすべての属性を生成しておく手もありますが、出力されるHTML/JSPにあわせてJavaクラス側で生成せず、一時変数をJSP内だけで保管して順次出力するのに使います。

[3] 一時的に保存しておきたい情報をHttpSessionへ格納するのか、ストレージへ格納するのかは、設計で判断するところです。利用される同時ユーザー数、一時保存しておきたい情報の量をあらかじめサイジングして、提供するアプリケーションにあわせて検討します。
個人的には、HttpSessionに格納するのはおっしゃる通りログイン情報など常に保存する内容くらいの少量にしておき、それでも数イベント内だけで保存しておきたい情報がある場合は、確実に破棄できるようHttpSessionを操作するためのルール作りをします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/11 18:30

    ご回答ありがとうございます。返答が遅くなり申し訳ございません。
    [2]項についてですが、変数定義(Value Stackへの登録)としては、s:setもJava側(クラス)も同義だが、その変数の使用目的を視覚的に明確にする為、と言った解釈でよろしいでしょうか?

    キャンセル

  • 2019/03/12 00:39

    そうですね、確かに同じ意味になりますが、あえて言うなれば、JSP(画面内)内の実装でしか使わないものはJSP内で作るべきで、その理由として、Action側はJSPで表示するためだけの値を作らない方が、Actionクラスがシンプルにできるからです。具体的には、表形式で出力する際に、ループ変数を一時変数に出しておいて、一時変数の値によってスタイルシートのクラスを書き換えたいが、しかしその条件が複雑な場合など、ActionクラスからJSPへ渡すのは検索結果であって、スタイルシートはJSPなどのView側で担うべきなので、JSPで判定して、一時変数でsetに格納しておくなどがあります。

    キャンセル

  • 2019/03/12 08:19

    疑問点を解消する事が出来ました。
    ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる