
JavaWebアプリ開発勉強会レポート Vol.2
「覚える」のではなく「作れる」ようになる!を合言葉に開催しているJavaWebアプリ開発勉強会は、開発系の勉強会の中でも資格取得ではなくプログラミングの楽しさや面白さを学んで貰う事を目的としています。そんな実践的で実技多めなJavaWebアプリ開発勉強会の第3回目をレポートします。
1.今回のテーマと内容
今回のテーマは、ズバリ「スコープ」です。前回は、Webシステムのフロント部分のベースとなる「フォーム」とWebアプリケーション処理のベースとなる仕組みの「MVCモデル」について学びました。今回は、Webシステムで必要なデータを保持する仕組みの「スコープ」です。スコープとは?から始まり、3つのスコープについての解説のあと実際に自分でプログラムを作って、「スコープ」を体験します。
では、今回のコンテンツです。
1-1.スコープ
まずはスコープの基本から講義が始まります。本日のはじめの1歩ですが、基本の「き」ですから、講師も丁寧に説明をしていきます。大まかな講義の流れは次の通り。
①スコープとは
②インスタンスが共有できないと。。。
③スコープの種類
④スコープとインスタンス
⑤スコープの基本
一方、受講者はというと3回目の講義ということもあり、緊張も解けてリラックスした雰囲気で受講していますが、みなさん目は真剣です。いい緊張感ですね!
①スコープとは
スコープとは、インスタンスを保存できる領域(メモリ)であり、サーブレッ トクラスとJSPファイルが任意のインスタンスを保存したり、保存 されているインスタンスを取得したりすることができる。
②インスタンスが共有できないと。。。
サーブレットクラスが処理結果を⽣成 し、その出⼒依頼をJSPファイル にフォワードしても、JSPファイ ルは処理結果(インスタンス)を取得できません。「JSPファイルにフォワード」は、前回の講義で勉強しましたね。
座って聞くだけでなく、実際に自分で作って確認することができる勉強会ですから理解もバッチリです!
③スコープの種類
・リクエストスコープ
・セッションスコープ
・アプリケーションスコープ
④スコープとインスタンス
スコープに保存できるのは「インスタンス」に限られています。
int型やdouble型などの基本データ型変数はインスタンスで はないのでスコープに保存できません。
基本データ型をスコープに 保存したい場合は、ラッパークラス(基本データ型の情報だけを格 納するIntegerやDoubleなどのクラス)を利⽤します。スコープには String、Integerなど通常のクラスのインスタンスを保存できますが、 基本的には「JavaBeans」と呼ばれるクラスのインスタンスを保 存します。ここでは、講義内容を詳細にレポートできませんが、基本をしっかりと押さえた講義内容ですので、受講者もちゃんと講義についてきています。みなさん、実技に向けてイメージを膨らませながら聞いているのでしょうか。
1-2.リクエストスコープ
3つあるスコープの1つ目、「リクエストスコープ」です。大まかな講義の流れは次の通り。
①リクエストスコープの特徴
②リクエストスコープの基本操作
③リクエストスコープの注意点
①リクエストスコープの特徴
リクエストスコープはリクエ ストごとに⽣成されるスコー プで、このスコープに保存した インスタンスは、レスポンス が返却されるまで利⽤することができ、フォワード元と フォワード先でインスタンス を共有することができます。
②リクエストスコープの基本操作
・リクエストスコープにインスタンスを保存
リクエストスコープにインスタンスを保存するには、HttpServletRequest インスタンスのsetAttribute()メソッドを使⽤します。
・リクエストスコープ内のインスタンスを取得
リクエストスコープに保存したインスタンスを利⽤する場合は、 HttpServletRequestインスタンスのgetAttribute()メソッドを使⽤します。
③リクエストスコープの注意点
リクエストを跨いでインスタンスを共有することはできない!!
まずは、リクエストスコープから講義です。図を使った処理の流れと実際のコーディング例を対比しながら講義が進みます。講師の方は受講生の様子を見ながら、所々前回までの復習を盛り込んだりととても丁寧です!
1-3.セッションスコープ
3つあるスコープの2つ目、「セッションスコープ」です。大まかな講義の流れは次の通り。
①セッションスコープの特徴
②セッションスコープの基本操作
③セッションスコープの仕組み
④セッションスコープの注意点
①セッションスコープの特徴
セッションスコープは、リクエストを跨いでインスタンス を利⽤したい場合に使⽤します。セッションス コープに保存したインスタンスは、 「利⽤者がブラウザを閉じる」か、 「開発者が明⽰的にインスタンス を削除する」まで⾃由に利⽤する ことができます。
②セッションスコープの基本操作
・セッションスコープの取得
HttpSessionインスタンスは、HttpServletRequestインスタンスの getSession()メソッドで取得します。
・セッションスコープにインスタンスを保存
セッションスコープにインスタンスを保存する場合は、 HttpSessionインスタンスのsetAttribute()メソッドを使⽤します。
③セッションスコープの仕組み
・セッションID
セッションスコープの正体であるHttpSessionインスタンスは ユーザー(ブラウザ)ごとに作成されます。アプリケーションサーバ はHttpSessionインスタンスを作成すると、内部で「セッションID」と呼ばれるIDを新たに発⾏し、HttpSessionインスタンスと ブラウザに設定することで両者を紐付けます。
・セッションIDとクッキー
クッキーとは、Webサーバ(またはアプリ ケーションサーバ)がブラウザにデータを保 存、送信させるしくみです。サーバがレスポン スに「クッキー」と呼ばれるデータを含め ると、レスポンスを受信したブラウザは クッキーをコンピュータに保存し、以後そのサーバにアクセスする際は、保存したクッキー情報を⾃動的にHTTPリクエストに付加して送信するようになります。アプリケー ションサーバは、クッキーにセッションIDを含めることでブラウザ/サーバ間でセッ ションIDのやりとりを可能にしています。
④セッションスコープの注意点
セッションスコープを多⽤しすぎると、アプリケーションサーバ がメモリ不⾜になり性能の低下を引き起こしてしまいます。そこでア プリケーションサーバは⼀定時間利⽤されていないHttpSession インスタンスを不要と判断し、ガーベジコレクションの対象とし、これを「セッションタイムアウト」といいます。
続いて、セッションスコープの講義です。図を使った処理の流れと実際のコーディング例を対比しながら講義はリクエストスコープと同じですが、具体的に説明していきます。
「セッションID」、「クッキー」、「セッションタイムアウト」など、よく聞く単語が飛び交いますが、聞いたことはあって知っているけど、ちゃんと説明できないって人が意外と多いので、ひとつひとつ丁寧に解説してますね。ここ重要なポイントです!!
1-4.アプリケーションスコープ
3つあるスコープの最後、「アプリケーションスコープ」です。大まかな講義の流れは次の通り。
①アプリケーションスコープの特徴
②アプリケーションスコープの基本操作
③アプリケーションスコープの注意点
①アプリケーションスコープの特徴
アプリケーションスコープは、 1つのアプリケーションにつき1 つ作成されるスコープです。そのた め、アプリケーションスコープ に保存したインスタンスは、 Webアプリケーションが終了するまでの間、アプリケーション 内の全てのサーブレットクラス、 JSPファイルで利⽤することができます。
②アプリケーションスコープの基本操作
・アプリケーションスコープの取得
ServletContextインスタンスは、サーブレットクラスのスーパーク ラスであるHttpServletから継承したgetServletContext()メソッド で取得できます。
・アプリケーションスコープにインスタンスを保存
アプリケーションスコープにインスタンスを保存する場合は、 ServletContextインスタンスのsetAttribute()メソッドを使⽤します。
③アプリケーションスコープの注意点
・同時アクセスによる更新
アプリケーションスコープ内のインスタンス を更新するような処理を複数のリクエストが ほぼ同じタイミングで⾏うと、アプリケー ションスコープのインスタンスに不整合が発⽣する場合があります。対処法としては、このような不整合がアプリケーションにとって致命的になるデータはアプリケーションスコープ で保存しない(または保存後は取得のみで更新しない)か、あるいはスレッドによる競合 が発⽣しないように調停を⾏う必要があります。「スレッ ド」とは処理の単位のことで、リクエスト毎にスレッドが作成されます。
・インスタンスの保存期間
アプリケーションスコープに保存したデータ(インスタンス)は、メモリ上 にあるためWebアプリケーションを終了すると消滅してしまいます。
Webア プリケーション再開後でも使⽤できるようにするには、ファイルやデータ ベースに保存する必要があり、またセッションスコープと違いタイムア ウトがないので、削除しないとメモリにインスタンスが残り続けてしまいます。
⼤量のインスタンスを保存したままにすると、メモリを圧迫し続けること になるので注意が必要です。
最後に、アプリケーションスコープの講義です。「リクエストスコープ」、「セッションスコープ」の復習を兼ねて、スコープの範囲、保存期間などを比較しながら講義が進んでいきます。それぞれのスコープがWebシステムのどの範囲で有効かを繰り返し解説する熱の入った講義です。ここでも受講生から積極的な質問があがり、一つ一つ丁寧に回答していきます。時には現場での経験を交えた具体的なテクニック(プログラミングだけでなく、設計する際の観点など)も披露され、経験豊富な講師陣ならではだなと感心するばかりです。
以上で今回の座学は終了。いよいよみなさんお待ちかねの実技に移ります!
今回は実技の課題が盛りだくさんです。
1-5.ハンズオン(スッキリわかるサーブレットJSP)
ハンズオンでは、座学で学んだことを実際に自分でプログラムを作成して確認します。「覚える」のではなく「作れる」ようになる!!を目指して受講者のみなさんとても楽しそうに、そして真剣に取り組んでいます。今回は、「リクエストスコープ」、「アプリケーションスコープ」、「セッションスコープ」の3つのスコープを使用したプログラムをそれぞれ作成して違いを確認していきます。実技もだんだんと難易度が上がってきていますので、みなさんちょっと苦戦気味のようですね。講師の方も受講生に声をかけながらサポートしていきます。早く進んだ人が遅れている人に教える、いつもの風景ですが、それが普通にできる雰囲気もこの勉強会の特徴ですね。残念ながら時間内に課題がクリアできなかった受講生もいましたが、次の勉強会までにきちんと復習しておきましょう!
2.次回予告
次回のテーマは「アプリケーション作成」です。いよいよ当勉強会も折り返しです。今まで勉強した技術をしっかりと復習しながら進めていきます。もちろん実技多めですので、乞うご期待!!
3.受講者の声と評価
今回の参加人数6名、辛口の受講者アンケートでは、満足度が平均「94点」を獲得し、「演習時間が長く最後までやり切れた。」「講師のみなさんのサポートのおかげで、理解が深まりました。」など、多くの評価を頂きました。残念ながら、時間内に課題を完成できなかった受講生もいましたが、アンケートの満足度はいずれも高いものでした。やはり、実際に自分でプログラミングできる形式の講座ならではの結果だと思います。
4.勉強会で伝えたい事
今回は「スコープ」について勉強しましたが、いずれもWebアプリケーションの基礎となる知識です。間違って覚えている方が多い部分ですが、効率よく処理するアプリケーションを作成するためには、3つの「スコープ」の特徴と注意点を明確に理解をする必要があります。当勉強会では、「覚える」のではなく「作れる」ようになる!を合言葉に、プログラミングを実際に経験してプログラミングの楽しさ、面白さを学んで現場で活躍できることを目指します。そのために、実技多めで楽しく技術を身につけられる様に工夫しています。自分で試してみて失敗してながら経験して技術を身に着けていってください。一緒にプロフェッショナルを目指して頑張りましょう!!
本勉強会は、メイン講師2名(2019年10月現在)によって構成しており、受講者からの質問や問い合わせにも手厚く対応しています。ぜひ、見学に来てね!!