新闻正文

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)(转老站)
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享