Perl/CGI研究室 'PERL-LABO'

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Javaスクリプトでカウント表示

研究内容

アクセスカウンターを、画像ではなく普通のテキストで表示します。 CGIプログラムをJavaスクリプトとして呼び出すというテクニックを学びます。

詳細

CGIプログラムの呼び出し方

これまで、CGIプログラムを呼び出す方法として次のようなことをしてきました。

・普通にリンク先として(HTMLファイルとして)CGIプログラムを指定する
・フォームの送信ボタンを押したときにCGIプログラムが実行されるように指定する
・IMGタグで(画像として)CGIプログラムを指定する(アクセスカウンターなどでよく使われます)

CGIプログラムは、プログラムの出力が「HTMLです」「GIF画像です」といったことを指定することが できたのでした。そのため、IMGタグでCGIプログラムを指定するなんてことができたのでした。 実際は、あらゆる種類のタグのファイル指定部分にCGIプログラムが指定できるのです。つまり、

・外部スタイルシートとしてCGIプログラムを指定する
・外部JavaスクリプトとしてCGIプログラムを指定する

ということもできます。

Javaスクリプトとしてアクセスカウンターを呼び出せば…

これまで、アクセスカウンターのカウント表示をするためにIMGタグを使っていました。 gifcat.plという画像連結ライブラリを利用させて頂いて、カウント画像(数字の画像)をCGIプログラムで出力していたのです。 なぜ画像を使うかと言えば、「テキスト文字列をHTMLソースに動的に埋め込む」というタグが無いからですね。 例えば、<text src="counter.cgi"> みたいなタグで、CGIプログラムから出力されたテキストを そのまま画面に表示できればいいのですが、それが出来ないのです。 IFRAMEタグを使えば近いことができるのですが、ブラウザによって見た目(マージンとかパディングとか)が微妙に異なるという 問題があって、使えませんでした。

そこで、「外部JavaスクリプトとしてCGIプログラムを指定する」というテクニックの出番です。 この方法を使うと、動的に変化するテキスト文字列をHTMLの中に埋め込むことができちゃいます!

Javaスクリプトでテキストを出力する方法

Javaスクリプトはプログラム言語ですので、いろんなことができます。 動的にHTMLソースを出力することもできます。HTMLの中で次のようにすれば良いのでした。

<script type="text/javascript">
document.write("HELLO!");
</script>

実際の表示は次の通り。


外部Javaスクリプトを読み込む方法

Javaスクリプトを直接HTMLの中に書くのではなくて、別のファイルにした場合は次のようにすれば良いのでした。

次のようなファイル java.js があるとき、

document.write("HELLO!");

次のようにして java.js を実行できます。

<script type="text/javascript" src="java.js"></script>

実行結果は次のようになります。


CGIプログラムからJavaスクリプトを出力する方法

CGIプログラムからJavaスクリプトを出力するのは、かーんたんです。 Content-type として、text/plain を指定して、あとは普通にJavaスクリプトをテキスト出力するだけです。 次のようなプログラムになります。

#!/usr/bin/perl

print << "EOM";
Content-type: text/plain

document.write("HELLO!");
EOM

これを、上記の外部Javaスクリプトを実行する方法で呼び出すと…


できた!見た目はこれまでの例と同じなのですが、↑に表示されている"HELLO!"はCGIプログラムが出力したものなんですよ! この方法で、アクセスカウンターの数値をテキストで画面に表示する方法できますね。

結果

当サイトのアクセスカウンターです。

これまでの画像によるカウント表示では、3つの数値を表示するためにCGIプログラムに3回のアクセスが必要でした。 また、gifcat.plを利用していたため、パラパラ〜と左側の数値から1つずつ表示される感じでした。 この方法にすると「CGIプログラムへのアクセスが1回で済む」「パッと一瞬でカウントが表示される」という メリットがあることが分かります。

ただしデメリットが2つあります。 1つは、IMGタグでの表示と違って、SCRIPTタグでの表示は、その表示処理が終わるまで そこから下の表示が行われないっていうこと。 つまり、仮にCGIプログラムのレスポンスに5秒かかったとすると、ウェブページの表示が完了するのが5秒遅れるわけです。 通常はあまり問題にならないと思いますが、アクセスカウンターが他のサーバーにあって、 そのサーバーがダウンしていたりすると、ウェブページの表示が遅れるということが起きますので、 ちょっと注意が必要なところですね。 もう1つのデメリットは、Javaスクリプトが無効になっている訪問者さんをカウントできないという点です。 これについては、Javaスクリプトってすごく便利ですから 無効にしている人は少ないはずですが、気にとめておいた方がいいですね。 必要であれば、NOSCRIPTタグをうまく使うことで回避できます。

こうして無事に今回の研究は終了です。また少し知識が増えましたね(^^ 今回はアクセスカウンターをテキストで表示するという研究でしたが、CGIプログラムをJavaスクリプトとして 呼び出すっていうのはいろいろ応用が利きますから、覚えておくとどこかで役に立ちそうです。

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Copyright (c) 'PERL-LABO' All Rights Reserved.  リンクフリーです。