前ページまでで、ブックマークの一覧表示と登録が行えるようになりました。続いて、アクセス数をカウントする仕組みを追加することにします。
前ページの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.