摘 要:本文研究了Java Applet程序与互连网浏览器之间的通信技术,重点阐明了getParameter()、showStatus()以及showDocument()等方法的使用技巧。
关键字:Java Applet,浏览器,通信
在应用Java技术进行软件开发时,通常都会遇到Java Applet程序与互连网浏览器之间的通信的问题。在java.applet包中的Applet类里提供了许多方法,使之可以与浏览器进行通信,包括getCodeBase()、getDocumentBase()、getParameter()、getParameterInfo()、showStatus()、getAppletInfo()等方法。另外,还有java.applet包中的的AppletContext类里的showDocument()方法。
本文重点讨论getParameter()、showStatus()和showDocument()的用法和技巧。
一、getParameter()方法
Java Application通过命令行接受用户参数,在Applet中,这个任务是通过HTML文件的另一个专门标记<PARAM>来完成的。从下面的例子中可以看出它的使用方法:
<HTML>
<BODY>
<APPLET code="AppletParam.class" height=60 Width=300>
<PARAM name=varname value="Liu">
<PARAM name=varnum value=30>
</APPLET>
</BODY>
</HTML>
这个HTML文件中嵌入了一个名为AppletParam的Applet,同时在Applet运行时将向它传递两个字符串参数:一个参数名为varname,取值为“Liu”;另一个参数名为varnum,取值为30。可见每个<PARAM>标记都只能传递一个字符类型的参数,这个参数的名字用来把它和其他参数区分开来,用name指定,这个参数的参数值用value指定。
Applet利用getParameter()方法来获取HTML传递来的参数。这个方法的格式为:
String getParameter(String name);
该方法的功能是返回HTML中设定的值。字符串参数表示它所希望获取的HTML参数的名字(即name指定的参数名)。方法的返回值是一个字符串对象,即HTML文件中value指定的字符串,如果希望这个参数是其他类型,还要进行参数类型的转换。在处理Applet参数时,通常要给出缺省值,以防止用户未给出该参数或给出非法参数值而使程序无法执行。
下面是ApplerParam.java的源代码,注意观察Applet如何从HTML文件中获取参数。
import java.applet.Applet;
import java.awt.Graphics;
public class AppletParam extends Applet{ //定义主类
private String name; //用于接收HTML参数的程序变量
private int num;
public void init(){
name=getParameter("varname"); //接收HMTL中传递的参数
num=Integer.parseInt(getParameter("varnum"));
}
public void paint(Graphics g){
g.drawString("Hello "+name+" ! Your are "+num+" years old.",10,20);
}
}
二、showStatus()方法
Applet可以通过显示简短的状态串,报告Applet的运行情况,状态串显示在浏览器或Appletviewer窗口的底部。在浏览器中,一个Web页上的所有Applet与浏览器本身共享同一状态显示域。Applet显示状态串使用showStatus()方法,showStatus()方法就是用来在浏览器的状态条显示信息。这个方法的格式为:
void showStatus(String msg);
下面的例子说明了如何使用showStatus()方法,该程序的功能是单击按钮button,将文本框txt里的文字显示在浏览器的状态条中。
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class UIApplet extends Applet implements ActionListener{
TextField txt;
Button button;
public void init(){
txt=new TextField(10);
add(txt); //填加文本域组件
button=new Button("Show");
button.addActionListener(this);
add(button); //填加按钮组件
}
public void actionPerformed(ActionEvent e){//响应按钮事件的事件处理方法
showStatus(txt.getText()); //将文本域内容显示在状态行
}
}
通常这一信息只是暂时性的,所以不应该用于显示重要的信息或用于调试。由于状态显示域位置不突出,并且随时可能被浏览器或其他Applet重写,因而状态串通常只应是一些不常用的辅助性的信息。对于一些至关重要的提示和警告信息,不要作为状态串显示在状态行,应该显示在Applet区域本身或是显示在标准输出上。
对于重要的信息或调试时要使用的信息,应该使用类System把它输出到标准输出,在标准输出上报告诊断信息主要用于调试Applet。另外,当一个Applet生命周期出现了未捕获的异常时也可以从标准输出看到一些消息。标准输出的确切显示位置不确定,它依赖于浏览器的实现以及对浏览器或Appletveiwer的用法,如果在Unix的Shell窗口使用浏览器,则往标准输出上显示的字符串将输出到shell窗口上,而在X窗口菜单使用浏览器,则标准输出将打到console窗口。Netscape Navegator一般将Applet的标准输出放到Java console窗口,该窗口由Options莱中弹出。
三、showDocument()方法
showDocument()方法是AppletContext类的方法。它可以用来请求浏览器显示一个URL地址对应的HTML文件,并且可以控制显示在哪个浏览器窗口。它的格式如下:
void showDocument(URL url);
或者
void showDocument(URL url,String target);
具有一个参数形式的showDocument()指示浏览器在指定的URL显示有关文档,它没有指出显示文档的窗口,指定的HTML文件将在Applet所在的窗口中显示。
具有两个参数的showDocurnent()进一步指定显示文档的窗口,第二个参数target可以指明显示Applet的窗口,可以取下列值:
“_self”在Applet的窗口中显示文档。
“_parent”在Applet窗口的父窗口中显示文档。若Applet是顶级窗口,效果同“_self”。
“_top”在Applet窗口的顶级窗口显示本文档。
“_blank”在一个新的无名窗口上显示文档。
“windowname”在名为windowname的窗口上显示文档,这一窗口可在需要时生成。
下面的程序在当前浏览器窗口中显示了烟台大学的主页。
import java.applet.*;
import java.net.URL;
import java.net.MalformedURLException;
public class sd extends Applet{
public void init(){
String us="http://www.ytu.edu.cn"; //www.ytu.edu.cn为烟台大学主页地址
URL u=null;
AppletContext ac=getAppletContext(); //定义AppletContext类的对象ac
try{
u=new URL(us);
}catch(MalformedURLException e){
System.err.println("Malformed URL:"+us);
}
if(u!=null){
ac.showDocument(u); //在当前浏览器窗口显示烟台大学主页
}
}
}
如果将上面程序中的语句
ac.showDocument(u);
改为
ac.showDocument(u,"_blank");
那么程序将保留原来的浏览器窗口,然后打开一个新的浏览器显示烟台大学主页。
参考文献
1. 刘其成等. Java语言基础教程. 石油大学出版社,2001
2. 刘其成等. 基于Java的DHTML技术及其应用. 微型机与应用. 2000, 12
3. 刘其成等. 面向对象的柔性设计与控制理论. 计算机工程与应用. Vol 38, No.18 4. 刘其成等. 基于Java数据报通信技术的聊天室设计与实现. 信息技术. 2002, 8
|