|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.servlet.GenericServlet javax.servlet.http.HttpServlet WebCountServlet
public class WebCountServlet
Web アクセスカウンタサーブレット $Id: WebCountServlet.java,v 1.1 2008/01/11 15:34:34 isao Exp $ Copyright(c) 2005, isao yasuda, All Rights Reserved. ---- 1.仕様 (1)初期パラメータ値を取得する - カウンタファイルディレクトリ - 画像ファイルディレクトリURL - ログファイル名 (絶対パス) - 更新インターバル (同一IP更新設定時間) - 参照管理テーブルパケット数 (カウンタの総数が目安) - URLチェック用正規表現 (2)リクエストパラメータ (get/post メソッド) - id=カウンタID - ty=画像ファイルプレフィックス 指定あり "*": カウンタ画像出力 (数値からカウンタ画像を生成する) 指定あり 他 : 指定値+数字.gif でカウンタ画像出力 (gif) 指定なし : テキスト出力 (JSP,SSI でページに挿入する) - md=要求モード r: 参照モード カウンティングしない - カウンタ表示あり n: カウントモード カウンティングする - カウンタ表示なし *: カウントモード カウンティングする - カウンタ表示あり (* 上記以外) (3)カウンタファイルが存在しない場合初期作成する. (4)リファラが URL チェック用正規表現にマッチしない場合処理を中止する. (5)カウンタ値の read, 更新, write はスレッドセーフとする. (6)要求IP,IDが直前と同じ,かつ前回から設定時間内の場合カウントアップしない. (7)リファラ,日時をログに記録する. 2.使用方法例 (1)画像出力の場合 HTML でカウンタを表示したいところに以下を記述する.: <img src="http://host/webcount/counter?id=xxx&ty=y&md=z"> - id, ty, md は仕様を参照.URLは tomcat 設定に依存する. <img src="http://host/webcount/counter?id=000&ty=s&md=r"> - カウンタID 000 を参照のみ.カウンタは s0.gif〜s9.gifで合成表示する. <img src="http://host/webcount/counter?id=abc&ty=*&md=x"> - カウンタID abc をカウントアップ.値はシステムフォントで生成する. <img src="http://host/webcount/counter?id=a01&&md=r"> - カウンタID a01 をカウントアップ.カウンタは表示しない. (2)テキスト出力の場合 JSP でカウンタを表示したいところに以下のような記述を挿入する. <jsp:include page="counter" flush="true"> <jsp:param name="id" value="c00" /> <jsp:param name="md" value="r" /> </jsp:include> - カウンタID c00 を参照のみで, テキスト表示する(ty 省略). 3.Tomcat 設定 - 配備パス(例) $CATALINA_HOME/webapps | +- /webcount -+- /WEB-INF -+- web.xml | +- classes -+- WebCountServlet.class | | +- WebCounter.class | | +- WebAccess.class | +- lib --- Acme.jar +- /img ------------------ s0.gif ~ s9.gif (samples) +- /api ------------------ documents - server.xml <Context path="/webcount" docBase="webcount" debug="0" reloadable="true" crossContext="true" /> (モジュールが更新されたらリロードされる設定) - web.xml サンプル参照 4.環境設定の注意事項 (1)ACME Labs の Acme.JPM パッケージが gif 画像生成のため必要である. http://www.acme.com/java/software/ (2)awt パッケージを用いて画像出力を行うため,ディスプレイ設定が必要 UNIX では tomcat 起動の前に以下のいずれかを行う必要がある. - X11 起動後 "xhost +" を実行し, DISPLAY 環境変数を設定しておく. - Xvfb を設定し, 起動しておく. 5.参考文献 (1)カウンタ画像合成方法など: J. Hunter, W. Crawford 著, 中田 秀基 訳, 『Javaサーブレットプログラミング 第2版』, オライリー・ジャパン(2002.1)
フィールドの概要 | |
---|---|
(package private) static java.io.BufferedWriter |
clog
ログライタ |
(package private) static java.lang.String |
cntDebug
デバッグモード |
(package private) static java.lang.String |
cntEntry
参照管理テーブル(HashMap)パケット数 ≒ 格納IDエントリ総数 |
(package private) static java.lang.String |
cntFileDir
カウンタファイルディレクトリ |
(package private) static java.lang.String |
cntImgDirURL
イメージファイル URL |
(package private) static java.lang.String |
cntLogFile
ログファイル名 (絶対パス) |
(package private) static java.lang.String |
cntTime
カウンターインターバル:秒 (同一ID,IP要求のカウンタ更新間隔) |
(package private) static java.lang.String |
cntUrlChk
チェックURL文字列 |
(package private) static boolean |
dbgflg
デバッグフラグ |
(package private) static int |
entries
HashMap パケット数 |
(package private) static java.lang.String |
FONTNAME
カウンタ画像フォント名 |
(package private) static int |
FONTSIZE
カウンタ画像フォントサイズ |
(package private) static int |
FONTSTYLE
カウンタ画像フォントスタイル |
(package private) static int |
HEIGHT
カウンタ画像領域 高 |
(package private) static java.util.Map |
hm
HashMap 参照管理テーブル |
(package private) static long |
interval
カウンターインターバル |
(package private) static java.util.regex.Pattern[] |
ptns
チェックURL文字列正規表現パターン |
(package private) static int |
urlnum
チェックURL文字列格納トークン数 |
(package private) static java.lang.String[] |
urls
チェックURL文字列 |
(package private) static java.util.StringTokenizer |
urltoken
チェックURL文字列格納トークン |
(package private) static int |
WIDTH
カウンタ画像領域 幅 |
(package private) static int |
XP
カウンタ画像フォント描画 X座標 |
(package private) static int |
YP
カウンタ画像フォント描画 Y座標 |
コンストラクタの概要 | |
---|---|
WebCountServlet()
|
メソッドの概要 | |
---|---|
void |
destroy()
Destroyメソッド: ログのクローズを行う. |
void |
doGet(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse resp)
Getメソッドの要求パラメータに従い, カウンタ更新, カウンタ表示を行う |
void |
doPost(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse resp)
Postメソッドの要求パラメータに従い, カウンタ更新, カウンタ表示を行う. |
void |
init()
サーブレット初期化を行う |
void |
outImageDmyCounter(javax.servlet.ServletOutputStream out)
ダミーカウンタ画像を出力する. |
void |
outImageExtCounter(java.lang.String count,
javax.servlet.ServletOutputStream out,
java.lang.String prefix)
指定画像を合成してカウンタ出力する. |
void |
outImageGenCounter(java.lang.String count,
javax.servlet.ServletOutputStream out)
カウンタ画像を生成して出力する. |
int |
renewCounter(long nT,
java.lang.String ip,
WebAccess wa,
WebCounter wc)
カウンタを更新する. |
void |
writeCLog(java.lang.String mesg)
カウンタログを出力する. |
クラス javax.servlet.http.HttpServlet から継承されたメソッド |
---|
doDelete, doHead, doOptions, doPut, doTrace, getLastModified, service, service |
クラス javax.servlet.GenericServlet から継承されたメソッド |
---|
getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
static java.lang.String cntFileDir
static java.lang.String cntImgDirURL
static java.lang.String cntLogFile
static java.lang.String cntEntry
static java.lang.String cntTime
static java.lang.String cntUrlChk
static java.lang.String cntDebug
static int entries
static long interval
static java.util.Map hm
static boolean dbgflg
static java.io.BufferedWriter clog
static java.util.StringTokenizer urltoken
static int urlnum
static java.lang.String[] urls
static java.util.regex.Pattern[] ptns
static final int WIDTH
static final int HEIGHT
static final java.lang.String FONTNAME
static final int FONTSTYLE
static final int FONTSIZE
static final int XP
static final int YP
コンストラクタの詳細 |
---|
public WebCountServlet()
メソッドの詳細 |
---|
public void init() throws javax.servlet.ServletException
サーブレット初期化を行う. (1)初期パラメータを取得する. (2)更新インターバル, 参照管理テーブルの初期化, ログ割当てを行う.
javax.servlet.GenericServlet
内の init
javax.servlet.ServletException
public void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws java.io.IOException, javax.servlet.ServletException
Getメソッドの要求パラメータに従い, カウンタ更新, カウンタ表示を行う. (1)要求パラメータ, ブラウザ情報を取得する. (2)参照管理テーブルからカウンタID情報を取得する. (3)指定モードによりカウンタ更新を行う. (4)指定タイプによりカウンタ画像を生成しブラウザに出力する. (5)ログを出力する.
javax.servlet.http.HttpServlet
内の doGet
java.io.IOException
javax.servlet.ServletException
public void doPost(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws java.io.IOException, javax.servlet.ServletException
Postメソッドの要求パラメータに従い, カウンタ更新, カウンタ表示を行う. (Getメソッドと内容は同じ)
javax.servlet.http.HttpServlet
内の doPost
java.io.IOException
javax.servlet.ServletException
public void destroy()
Destroyメソッド: ログのクローズを行う.
javax.servlet.Servlet
内の destroy
javax.servlet.GenericServlet
内の destroy
public int renewCounter(long nT, java.lang.String ip, WebAccess wa, WebCounter wc) throws java.io.IOException
カウンタを更新する.
java.io.IOException
public void outImageGenCounter(java.lang.String count, javax.servlet.ServletOutputStream out) throws java.io.IOException
カウンタ画像を生成して出力する.
java.io.IOException
public void outImageExtCounter(java.lang.String count, javax.servlet.ServletOutputStream out, java.lang.String prefix) throws java.io.IOException
指定画像を合成してカウンタ出力する.
java.io.IOException
public void outImageDmyCounter(javax.servlet.ServletOutputStream out) throws java.io.IOException
ダミーカウンタ画像を出力する.
java.io.IOException
public void writeCLog(java.lang.String mesg) throws java.io.IOException
カウンタログを出力する.
java.io.IOException
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |