前ページまでで、ブックマークの一覧表示と登録が行えるようになりました。続いて、アクセス数をカウントする仕組みを追加することにします。
前ページのlist.jspでは、タイトル部分のリンクを、
<a href="該当サイトのURL"> サイト名 </a>
というHTML文で出力していたため、サイト名のリンクを選択すると、該当サイトのURLへ直接ジャンプしていました。しかし、この方法ではブックマーク集からアクセスされた回数をカウントすることができません。そこで、
<a href="jump.jsp?bookmarkid=ブックマークID"> サイト名 </a>
のようにリンク部分のHTML文を変更することで、一度 jump.jsp へアクセスし、そこでアクセス数をカウントアップする処理を行った後に、あらためて該当サイトのURLへ転送する、という処理を行うようにします。
この処理の流れは次の図のようになります。
まず、一覧表示のリンク部分を変更するために、list.jspの37行目、
"<a href=\"" + url + "\">" + title + "</a></td>"
の記述を次のように変更します。
"<a href=\"jump.jsp?bookmarkid=" + id + "\">" + title + "</a></td>"
リンク先のURLに?を付け、パラメータ名=パラメータ値とすることで、リンク先のページへパラメータの値をGETで渡すことができます。
続いて、一覧表示ページから渡されるブックマークIDの値を受け取って、カウントアップと転送処理を行うjump.jspを作成します。このjump.jspでは次の処理を行います。
プログラムは次のようになります。
1: <%@ page import="java.sql.*, atmarkit.MyDBAccess"
2: contentType="text/html; charset=euc-jp" %>
3: <%
4: // アクセス数をインクリメントし、登録URLへアクセスを転送する
5:
6: // パラメータとして渡されたブックマークIDを取得
7: String bookmark_id = request.getParameter("bookmarkid");
8:
9: // MyDBAccess のインスタンスを生成
10: MyDBAccess db = new MyDBAccess();
11:
12: // データベースへのアクセス
13: db.open();
14:
15: // カウントを1増やすためのSQL文
16: String sql_inc_count = "update bookmark set count=count+1 where bookmarkid=" + bookmark_id;
17:
18: // カウントのインクリメントを実行
19: db.execute(sql_inc_count);
20:
21: // URL を取得するためのSQL文
22: String sql_getURL = "select url from bookmark where bookmarkid=" + bookmark_id;
23:
24: // URL を取得するためのSQL文を実行
25: ResultSet rs = db.getResultSet(sql_getURL);
26:
27: // 結果からURLを抽出
28: rs.next();
29: String url = rs.getString("url");
30:
31: // データベースへのコネクションを閉じる
32: db.close();
33:
34: // 取得したURLへ転送
35: response.sendRedirect(url);
36: %>
まず、list.jspから渡されたパラメータ"bookmarkid"の値を7行目で取得しています。POSTまたはGETで渡されたパラメータの値は、
request.getParameter("パラメータ名")
で取得できます。ブックマークIDの値は整数値ですが、SQL文を生成するために使用するだけなので、文字列のまま処理を進めます。
今回は、アクセスカウントを1つ増やし、URLを取得する、という2つの処理を行うために、2つのSQL文を使用しています。それぞれ、次のようになります。
update bookmark set count=count+1 where bookmarkid=ブックマークID
select url from bookmark where bookmarkid=ブックマークID
where bookmarkid=ブックマークID
最後に、該当URLへ転送して処理を終わります。外部のURLへ転送するには、35行目に記述されているように、response オブジェクトの sendRedirect メソッドを使用します。
34: // 取得したURLへ転送 35: response.sendRedirect(url);
さて、上記のプログラムで、ブックマーク集からアクセスがあるたびにアクセスカウントが1増えるようになりました。
「@IT-アットマーク・アイティ」にアクセスした結果は次のようになりました。アクセス数が1増えたことを確認できます。
連載第1回の今回はここまでです。いままで紹介した手順で、ブックマークの一覧表示と新規登録、アクセスカウンタ機能が作成できました。次回は登録済みのブックマークを修正、削除する機能を作成してゆきます。
Copyright © ITmedia, Inc. All Rights Reserved.