34日目&35日目(2025.03.05~6) セッションを使ってカート作成


お疲れ様です!!

この記事を書いているのは3月6日ですが、内容は、昨日(3月5日)からやっているものになります。

なぜ、2日がかりになったのかというと、単純に疲れちゃったからです、、、

昨日に終わらせようと思った内容でしたが、まあこういう日もあるでしょう!!

というわけで、菅原先生、よろしくです!!

【セッションが使われる場面】

たまにネットサーフィンとかしていると、「セッションが切れました」とかいう表示が出て、「めんどくさ!!」って思ったことがあったのですが、

「めんどくさ!!」という気持ちが強すぎて、「セッションとは?」について考えたことがなかったです。

というわけで、しっかり勉強していきます!!

どういう場面でセッションが使われるのかというのを、菅原先生はショッピングサイトを例に挙げて説明してくださいました。

このセッション機能を使わないと、サーバーからレスポンスを受けた時点で、その情報はメモリ上から消えてしまうみたいです、、、

【セッション管理について】

セッションという仕組みを使うと、複数のリクエスト・レスポンスにまたがって、ユーザーの識別とデータの管理ができるようになる。

どうやってセッション機能を使うのか??

reqから「Sessionオブジェクト」を取得する
(サーブレットのプログラムの中で生成することができる)

★セッション管理を使うと、複数の画面間でデータの管理ができるようになる!!

<ユーザー識別について>

複数人がログインした状態だと、サーバーには人数分の情報が入っている

誰が注文したのかを識別する必要がある

裏側で「セッションID」というものが活躍している!!

セッションオブジェクトは、ユーザーごと(ブラウザごと)に作られ、ユーザーログイン情報は、サーブレットと通してセッションオブジェクトを作ると同時に自動的にセッションIDが割り振られる。

レスポンスのタイミングで、ブラウザに「ユーザー名」と「レスポンスID」をセットで送る

ブラウザ側では「Cookie」という仕組みを使って
「この人のセッションIDは○○だ」という情報を保存する

「Cookie」という、またまたよく聞くのに理解していない単語が出てきました!!

Cookie:

webページの利用履歴や入力情報などをテキストデータとしてwebブラウザに保存する仕組み

★2回目以降のリクエストでは自分が持っているセッションIDと、注文する本のデータを一緒に

 サーバーへ送る

セッションIDで「○○さんの注文」だと分かる。

※セッションIDの管理は、webサーバーとwebブラウザがやってくれるので意識する必要なし

【セッション管理のプログラムを書くポイント】

①セッションオブジェクトを生成する方法

②セッションオブジェクトに対してデータを格納する書き方

①1回作ったセッションオブジェクトを取得し直す方法

③セッションオブジェクトの中からデータを取り出す方法

★reqからセッションオブジェクトを取得

①HttpSession getSession(boolean create) → createの部分に「true」か「false」を入れる
初回時にture → 生成
false → null

★セッションオブジェクトのデータを管理

②void setAttribute(String name,Object value)
valueをnameという名前で格納する
(どのデータをどんな名前で格納するのか)

③Object getAttribute(String name)
nameという名前のデータを取得する

★attribute
→ 「属性」という意味。属性の値と名前をペアで指定するイメージ

★セッションオブジェクトに格納するデータはObject型として扱う(キャストが必要)

(格納する時のデータ型、取得する時のデータ型は共にObjectクラス)

※Objectクラスは、Javaの全てのクラスのスーパークラス
(例)String name = (String)session.getAttribute(“name”)

【コーディング例】

うむ!!

ちゃんと実行されました!!

コーディングの時のポイントとして、

★セッションを使うプログラムは、初回と2回目以降の動きを分けて考えると理解しやすい。
(ifの箇所)

★サーブレットクラスで、画面表示の記述をする際にHTML内の「””」は「”」の前に「¥」を入れる。(¥を入れないとサーブレットクラス内で文字列として認識してくれない)

★<form>タグのaction属性では、自分自身のサーブレットを指定する。

そのため、追加ボタンを押すとこのサーブレットのdoPost()メソッドが再び呼び出される。

★セッションオブジェクトは、ずっと放置しているとメモリが圧迫されるので、ブラウザから一定時間アクセスがない場合、セッションオブジェクトは破棄される。

「セッションが切れました」の裏側

※Tomcatのセッション時間はデフォルトで30分となっている。
→(tomcatフォルダ)¥conf¥web.xmlの<session-timeout>タグで指定できる。
→重要な設定ファイルなので、編集時には細心の注意が必要

というわけで、ちょいちょいと上手くいかない部分もありながらも最終的にちゃんと表示させることができました!!

引き続き楽しんでいこう!!!

コメントを残す