Spring FrameworkにおけるModelとSessionの属性追加メソッドの違いと覚え方
こんにちは。ゆうせいです。
新人研修中に受講者から以下の質問をいただきました。
SpringでmodelはaddAttribute(),sessionはsetAttribute()でしたか? なかなか覚えられないのですが?
今回はこの質問に答えたいと思います。
Spring FrameworkでWebアプリケーションを開発していると、画面へデータを渡す際のメソッド名が分からなくなるという疑問は非常に多く見受けられます。
ご認識のとおり、ModelにはaddAttributeを使用し、HttpSessionにはsetAttributeを使用します。メソッド名が異なる背景には、それぞれの機能が生まれた開発元の違いと、データを保持する期間という明確な違いが存在します。
開発元と設計思想の違い
両者のメソッド名が異なる最大の理由は、機能を提供している枠組みが違うためです。
- ModelのaddAttributeメソッド:Spring Frameworkが独自に提供している機能です。
- HttpSessionのsetAttributeメソッド:Java言語のWeb開発標準規格であるJava Servlet APIが提供している機能です。
Spring Frameworkは、Java標準の機能を土台として作られていますが、画面へのデータ受け渡しに特化した直感的な機能としてModelを独自に追加しました。そのため、標準規格であるSessionとは異なる独自のメソッド名が採用されています。
メソッド名を覚えるための具体的な比喩
専門用語であるリクエストスコープとセッションスコープというデータ保持期間の違いを、高校生活に例えて解説します。
ModelのaddAttribute(追加する)
Modelは、1回の通信(リクエスト)の間だけデータを保持する一時的な入れ物です。
高校の文化祭で、来場者に配る手提げ袋を作る作業を想像してください。空の手提げ袋に対して、パンフレットや案内図などの配布物を次々と追加していく作業がaddAttributeです。手提げ袋を来場者に渡し終えればその入れ物の役割は終わるため、一時的な追加作業としてaddという言葉が使われます。
HttpSessionのsetAttribute(配置・設定する)
HttpSessionは、ユーザーがWebサイトを訪問してから離れるまで、継続してデータを保持する入れ物です。
学校で生徒一人ひとりに割り当てられる個人ロッカーを想像してください。個人ロッカーの特定の場所に、辞書や部活の道具を配置して状態を維持する作業がsetAttributeです。ロッカーの中身は卒業するまで長期間保持され、いつでも同じ場所から取り出すことができます。指定の場所に設定して定着させるため、setという言葉が使われます。
それぞれを使用するメリットとデメリット
それぞれの仕組みには明確な長所と短所があります。用途に合わせて適切な使い分けが必要です。
Modelのメリットとデメリット
- メリット:画面を表示した直後にデータがサーバーから自動的に消去されるため、サーバーのメモリ消費を最小限に抑えることができます。
- デメリット:次の画面に遷移するとデータが消滅してしまうため、複数の画面をまたいで同じデータを使い回すことはできません。
HttpSessionのメリットとデメリット
- メリット:ログインしているユーザーの会員情報やショッピングカートの中身など、複数の画面を移動してもデータを維持し続けることができます。
- デメリット:開発者が意図的にデータを消去するか、一定時間が経過するまでサーバーのメモリにデータが残り続けるため、不要なデータを保持しすぎるとサーバーの動作を圧迫します。
学習のステップ
Webアプリケーションにおけるデータの取り扱いを習得するためには、以下の順序で学習を進めることを推奨します。
- ユーザーのブラウザからサーバーへ情報が送られ、画面が返ってくるまでの1往復の通信の流れを理解する。
- ModelとaddAttributeを用いて、1つの画面に対して文章や数値を表示させる基本的なプログラムを作成する。
- HttpSessionとsetAttributeを用いて、複数の画面を移動しても消えないデータを保持するプログラムを作成する。
- 扱うデータが一時的な表示用か、継続して必要な状態データかを見極め、両者を適切に使い分ける設計手法を学ぶ。
仕組みの根本的な違いを理解することで、メソッド名の違いも自然と記憶に定着していきます。順序立てて学習を進めてください。
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール


