memo.xight.org

日々のメモ

Java Appletによるアクセスカウンタ

Summary

  Java Appletでは,サーバのファイルシステムにアクセスすることができないため,
  以下の方法でJavaAppletアクセスカウンタを実現する.

方法 1. サーバ・クライアント通信による方法

  Java Appletでプロセス間通信を行う場合,そのAppletが置かれているサーバとだけ通信することができる.

<applet code="Counter.class" width="132" height="24">
	<param name="ndigits" value="6">
</applet>

  ndigits にはカウンタの桁数を指定する.

注意

  カウンタサーバを立ち上げる必要があるため,shellを開放していないサイトでは実現できない.

方法 2. SSI と併用する方法

  SSI (Server Side Include) は NCSA 系の HTTPD で採用されている機能である.
<applet code="SSICounter.class" width="132" height="24">
	<param name="count" value="<!-- #exec cmd="counter.pl" -->">
	<param name="ndigits" value="6">
</applet>

  count には表示すべきカウント値を指定する.
  counter.pl はアクセス数を 1
  インクリメントして標準出力に表示するプログラム

注意

  CERN系のhttpdを採用しているサイトではこの方法は実現できない.

方法 3. CGI と併用する方法

  ほぼすべてのサイトで実現できる方法
  以下のタグを <img> タグに埋め込んで空のイメージを返す.

<img src="/cgi-bin/cserver.pl?incr&link=index.html" />


  incr によってCGIがアクセス数をカウントアップすることを指示.
  link はカウントアップするページのURIを指定
  JavaApplet では
URI url = new URI(protocol, host, "/cgi-bin/cserver.pl?link=" + file);

  によって,CGI にアクセス.
  ここでは incr を指定しないことで,CGIにアクセス数をカウントアップすること無しにその値を返すことを指示
  アクセス数が増えるたびに表示をアップデートするリアルタイムカウンタを実現することが可能

追記

  別にアクセスカウンタが必要なわけじゃなくて,Applet との通信方法が知りたかっただけ.

Reference

  まるはち薬局のWWW技術情報 - Java
  Appletによるアクセスカウンタ
  http://www.orange.ne.jp/~yabu/java/counter/java.html