新闻正文
Java Applet 计数器(摘自computer world)
来源:JAVA天堂
JAVA学习者
2007-4-22 02:32:54
网友评论 0 条
字体:[
大
中
小]
~我要投稿!
站 (Fri Aug 15 21:56:45 1997) , 转信
信区: Java
标 题: Java Applet 计数器(摘自computer world) 日月光华站 (Fri Aug 8 08:16:07 1997) , 转信
HomePage中制作计数器的若干方法
林 海
在一些Web站点的HomePage中,设置了计数器来指示有多少用户已经访问
了此页面。这可以使读者了解到此页面受到欢迎的程度,因此越来越多的
HomePage中加入了这项功能。我们如何在自己的HomePage中实现计数器功能呢,
以下是作者在实践中得出的几种方法。
一、使用HTTP协议和CGI程序的方法。
例如有以下HTML文件:
<html>
<body>
<center>
<img src="welcome.gif"><p>
<h2><strong>您是第 <IMG SCR=" /cgi-bin/counter1.exe"> 位
访问者</strong></h2>
</center>
</body>
</html>
它所显示的Web页面如下:
我们看到在HTML文档中有以下语句:<IMG SCR=" /cgi-bin/counter1.exe">,
浏览器解释它时,通过HTTP协议向Web服务器请求图像,Web服务器启动虚拟
目录/cgi-bin下的CGI程序counter1.exe,它的功能是:
1) 从一个计数文件中读取计数值,增加1后写回计数文件;
2) 根据这个计数值生成一个 .gif 或 .bmp 或 .jpg 图像;
3) 向标准输出流输出所生成图像的位置。例如Web服务器的虚拟目录为
c:inetpubwwwroot,图像的文件名为
c:inetpubwwwrootcounter.gif,则输出的C语言程序语句为:
printf("Content-Type: text/html
");
printf("Location: /counter.gif
");
这种方法使用最普遍,但自己实现时,根据计数值生成图像是比较困难的,
需要了解所用图像的存储格式。即使知道了所用图像的存储格式,其编程也是相
当麻烦的。
二、使用Java Applet和Client-Server结构的方法。
在Web服务器上运行一个计数服务程序,每次当客户与其建立连接时,将计
数值增加1并返回给客户。传送到浏览器的HTML文件中内嵌Java Applet,
Applet通过 java.net.socket类和计数服务程序相连接,收到计数值后,通过
java.awt.Lable类或java.awt.Graphics类在Applet上显示出计数值。
这种方法比第一种方法实现简单,但需要在Web服务器上运行计数服务程
序,显得比较累赘。作者通过实践,把以上两种方法相结合起来,得到了下面的
方法。
三、Java Applet和HTTP协议以及CGI程序相结合的方法。
Applet通过 java.net.socket类不是和计数服务程序建立连接,而是通过
HTTP协议启动Web服务器上的CGI程序。作者在Windows NT Server 4.0及
Internet Information Server 2.0上通过了这种方法。作者认为,这种方法是
最简单和实用的方法,值得大家一试。其原理是:客户端通过HTTP协议向Web
服务器发出请求"GET /cgi-bin/counter3.exe HTTP/1.0
",Web服务器启动
虚拟目录/cgi-bin下的CGI程序counter3.exe,如果counter3.exe向标准输
出流输出"888888
”,则在客户端可得到:
HTTP/1.0 200 OK
Server: Microsoft-IIS/2.0
Date: Mon, 05 May 1997 11:13:30 GMT
Content-Type: application/octet-stream
888888
由此我们得到了实现的方法。下面包括了具体实现的HTML文件、Java
Applet counter3.class和CGI程序counter3.exe的源文件。
HTML文件:
<html>
<body>
<center>
<img src="welcome.gif"><p>
<h3>您是第 <APPLET CODE="counter3.class" WIDTH=70 EIGHT=18>
<PARAM NAME=Server VALUE="www.lh.nom">
</APPLET> 位访问者</h3>
</center>
</body>
</html>
counter3.class源程序counter3.java:
// counter3.java: HomePage中实现计数器的Java Applet
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;
public class counter3 extends Applet {
//{{DECLARE_CONTROLS
Label lbmsg; // 输出计数值的标签
//}}
public void init() {
super.init();
//{{INIT_CONTROLS
setLayout(null);
lbmsg=new Label("", Label.CENTER);
lbmsg.setFont(new Font("Dialog",Font.BOLD,14));
add(lbmsg);
lbmsg.reshape(0,0,63,15);
//}}
setBackground(Color.lightGray);
Socket socket;
DataInputStream ind;
PrintStream outp;
try
{ socket = new Socket(getParameter("Server"), 80);
// 其中80是Web服务器的端口号
ind = new DataInputStream( socket.getInputStream() );
outp = new PrintStream( socket.getOutputStream() );
outp.println("GET /cgi-bin/counter3.exe HTTP/1.0
");
String response;
while ( (response=ind.readLine()).length()>0 )
{
lbmsg.setText(response);
}
socket.close();
}
catch ( IOException ex ) { };
}
}
counter3.exe源程序counter3.cpp:
// counter3.cpp: HomePage中实现计数器的CGI程序
// counter3.exe 放在Web服务器虚拟目录 /cgi-bin 下
// Boland C++ 4.5 工程选项为Platform:Win32,Target Model:Console
#include <stdio.h>
int main()
{
int counter;
FILE *fp;
// 读取计数值
fp=fopen("c:\inetpub\wwwroot\counter.dat", "r");
if (fp==NULL)
counter=1;
else
{ fscanf(fp, "%d", &counter);
fclose(fp);
}
// 计数值增加1,并写回计数文件
counter++;
fp=fopen("d:\inetpub\wwwroot\counter.dat", "w");
if (fp==NULL)
{
printf("??????
", counter);
return 1;
}
fprintf(fp, "%d
", counter);
fclose(fp);
// 向标准输出流输出计数值
printf("%06d
", counter);
return 0;
}
它的Web页面如下:
在这里作者用java.awt.Label类来显示计数值,有兴趣的读者可以用
java.awt.Graphics类来作图,使计数值变得美观一些。
(作者地址:上海复旦大学网络与信息工程中心,邮政编码200433)
m;32mm
Twoc
<a href=
http://members.tripod.com/~twoc/index.html> 一笑</a>
不笑也得笑,不笑行吗?
收藏到ViVi 收藏此页到365Key
上一篇:
一起学Java (二 ).(动画) 下一篇:
Java 的网络功能与编程(1)(转老站)