EngineIT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。やり方1:アプリ内で完結させる(一時的)こちらは本記事では深くは扱いませんのでさわり程度に書きます。アプリ内に閉じたカウンタ(DB接続なし)の場合はサーブレット内でカウンタ用の変数を定義して、初回呼出し(initメソッド)や二回目以降呼出し(doGetメソッド)が呼ばれる度にカウンタをインクリメントして行きます。処理の概要としては次のようになるイメージです。1カウンタ用の変数(int型)を定義します。2ServeltConfigオブジェクトの「getServletContext()」メソッドを用いてServletContext型のインスタンスを作り、上記で定義したカウンタ変数をsetAttributeでセットします。1カウンタ用の変数(int型)を定義し、getAttributeで現在のカウンタの値を取得します。2カウンタをインクリメントします。3setAttributeでインクリメントしたカウンターをセットします。やり方2:データベースと連動させる(恒久的)こちらが今回のメインテーマです。以降に記載する仕様等は全てこの「やり方2」に関する記載となります。ユーザ画面のjsp(例:XXXX.jsp)からアクセスカウンターの役割をするサーブレット(例:AccessCounter2.java)のアクセスカウント用メソッドを呼び出します。そのメソッドの中でDBアクセスを行い、指定した画面IDのカウンターを更新・値取得を行います。アプリの仕様概要アプリケーション側の処理の概要を記載します。流れとして、大きく3つに分解しています。ユーザー画面ユーザー画面のjspでアクセスカウンタ用のメソッドをコール↓2サーブレット(アクセスカウンター)アクセスカウンタ用のServletでDB接続用の各種メソッド(Connection・Statement・ResultSet・Close)をコールし、指定した画面のアクセスカウンター数を取得&更新する。↓3DBアクセス部品DB接続用メソッド(Connection返却)とStatement作成メソッド(Statement返却)とSQL発行&結果取得メソッド(ResultSet返却)とリソース解放メソッド(上記3つのClose)の4つを用意します。getAttribute(“ABCD”)で、セットしたインクリメント後のカウンタの値を取得します。DB接続&ステートメント作成DB接続(Connection)とステートメント作成(Statement)を行います。カウンタの現在の値取得SQL(SELECT文)を発行して、指定した画面IDの「現在のアクセスカウンタ値」を取得します。カウンタのインクリメントSQL(UPDATE文)を発行して、指定した画面IDの「現在のカウンタ値」をインクリメント(+1)します。再度SQL(SELECT文)を発行して、指定した画面IDの「更新後のカウンタ値」を取得します。データベースの仕様概要DB側でやる事は、アプリからアクセスされて更新をするための、アクセスカウンターテーブルの作成です。レコードは画面単位で作成し、アクセスカウントもその単位でカウントします。工夫した点として、SEQUENCEオブジェクトを用いて「一意な連番を付与」するカラムを作成しました。目的としては、UPDATE文の作成にあたって「どのカウンターを更新すれば良いか?」のWHERE句に指定するカラムとして使うためです。TABLE文の発行)。TABLE文の例を紹介します。作成したテーブルに「INSERT文」でアクセスカウンターのレコードを挿入します。(図3)のように画面毎にレコードを作り、カウンターの初期値は当然ですが「0」を設定します。COUNTER_IDカラムには「ACCESS_SEQ.NEXTVAL」でINSERTする事で、先ほど作ったSEQUENCEに沿った連番を付与しています。ソースコード別記事「JSP/Servletで画面毎のアクセスカウンターを作成してみた(パート2:ソース解説編)」をご参照下さい。Connectionこのエラーが発生した際の対応については、下記の記事にて解説しているため割愛。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。EngineIT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。Reserved.Top。