当前位置:课程学习>>第九章 Applet程序设计>>文本学习>>知识点二
一、HTML的<applet>标记
1. Applet的调用
为了运行前面的例子,需要建立用于调用applet的Web页面。首先将CalculatorApplet.java编译为CalculatorApplet.class,然后编写CalculatorApplet.html文件,html文件代码如下;
<html>
<head>
<title>商品价格计算applet</title>
</head>
<body>
welcome.CalculatorApplet will appear below in a Java enabled browser.<br>
<applet code=”CalculatorApplet.class” width=”400” height=”140”>
</applet>
</body>
</html>
在控制台窗口(开始->运行->输入“cmd”,回车)的提示符下,使用appletviewer命令可以运行例9.1的applet程序。
如果要通过浏览器对applet进行访问,需要把CalculatorApplet.html和CalculatorApplet.class保存在Web服务器上,通过正确的URL就能浏览到applet。
2. HTML的<applet>标记
从上一节的代码中,可以观察到加载applet的HTML标记<applet>和<applet>标记的语法如下:
<applet
code = classfilename.class
width = applet_viewing_width_in_pixels
height = applet_viewing_height_in_pixels
[ codebase = applet_url ]
[ alt = alternative_text ]
[ name = applet_name ]
[ vspace = vertical_margin ]
[ hspace = horizontal_margin ]
[ align = applet_alignment ]
[ archive = archivefile ]
>
<param name = param_name_1 value = param_value_1>
<param name = param_name_2 value = param_value_2>
…
<param name = param_name_n value = param_value_n>
</applet>
属性code、width和height是必须的,分别指定了applet程序的类文件、可视区域的宽度和高度,各属性的含义如下:
(1) code: 用来指定包含applet字节码的.class文件。默认情况下,Web浏览器假定已编译的字节码文件和HTML文档在同一文件夹中,也可以使用codebase属性来指定一个不同的文件夹。
(2) width: 设置applet中可视区域的宽度,以像素为单位。
(3) height: 设置applet中可视区域的高度,以像素为单位。
(4) codebase: 用来设置Web浏览器所寻找的applet字节码文件的路径。例如,可以使用codebase属性值的“..”来指定包的父文件夹。
(5) alt: 用于Web浏览器识别<applet>标记而不下载或运行applet的时候。此时,applet不显示,仅以纯文本的方式显示alt属性值。典型的应用是使用该属性值来通知用户网页中包含一个不可见的applet。
(6) name: 用来设置applet的名称。如果HTML文档中有多个applet,可以通过该属性让它们之间彼此通信。另外,在JavaScript语句中也可以使用指定名称的applet。
(7) vspace: 设置applet上下边框的宽度,以像素为单位。Web浏览器会在applet的可视区域周围预留相应大小的空白区域。
(8) hspace: 设置applet左右边框的宽度,以像素为单位。用法同上。
(9) align: 该属性取值范围为left| right| top| texttop| middle| absmiddle| baseline| bottom| absbottom,用来设置当applet可视区域小于HTML的屏幕区域时,applet的对齐方式。如果applet可视区域超过屏幕区域时,则applet会自行进行剪切。
(10) archive: 用来设置含有applet文件的Java存档文件(.jar)。该属性值是一个URL,通常表示一个.jar文件或.zip文件的路径,一个.jar文件包含了applet使用的所有.class文件和其他文件。可以减少装载时间,改进执行效率。
3. 向Applet中传递参数
定义<param>标记,可以用来传递Web浏览器的applet参数,出现在<applet>和</applet>之间。该标记是可选的,可以没有,也可以有一个或多个。
(1) <param>的name: 用来设置applet参数的名称。
(2) <param>的value: 用来设置applet参数名称对应的参数值。
通过<param>标记指定的参数可以在applet程序中通过调用getParameter方法来获得。
【例9.2】信息显示applet程序。这个例子演示的是一个显示信息的applet。信息的文本和显示坐标值x和y由HTML文档指定。
//MessageApplet.java
import javax.swing.*;
import java.awt.*;
public class MessageApplet extends JApplet
{
String message;
//Initialize the applet
public void init()
{
message = getParameter("message");
Label label = new Label(message);
getContentPane().add(label);
}
}
<html>
<head>
<title>文本显示applet</title>
</head>
<body>
welcome.MessageApplet will appear below in a Java enabled browser.<br>
<applet code=”MessageApplet.class” width=”400” height=”100”>
<param name=”message” value=”Hello, My Applet!”>
</applet>
</body>
</html>
运行结果:
二、Applet应用
1. 浏览器对applet的支持
目前,包括Netscape Navigator、Microsoft Internet Explorer和Sun HotJava在内的主流浏览器都支持applet。同时,为了避免applet不被浏览器支持,Sun公司提供了Java插件(plug-in),允许用户自行安装Java运行环境(JRE),Java插件会重新替换旧的Java虚拟机(JVM)。Sun公司在最近发布的Java版本中保留了Java插件,并提供了移植工具来将已有的网页转换为Java插件(plug-in)。
网络浏览器必须设置成能运行applet程序。如果使用老版本的网络浏览器,或者仅设置成可运行使用低版本Java创建的applet程序,那么就可能无法在Web页面中运行applet程序。这时,建议用户升级为新版本的浏览器。
另外一种方法就是在编写applet时使用早期版本的Applet类,用以替换JApplet类。此时,需要导入语句:
import java.applet.Applet;
替换语句:
import javax.swing.JApplet;
同时把程序中所使用的swing组件替换为awt组件,并去掉相关的方法。
2. Applet的安全性
由于applet程序是嵌入在HTML页面中的,该applet的字节码在浏览者的主机中运行。所以说,applet程序是一种可以在他人主机上运行的程序,这就会引起许多的安全问题。例如,它是否会携带病毒,安装陷门或木马?它是否会破坏主机上的文件和数据?针对这些问题,applet被设计成为安全性的程序。
默认情况下,通过网络下载的applet字节码文件要通过字节码检验机进行检验,确保字节码符合Java虚拟机的规范。字节码检验减少了从事破坏活动者控制字节码在JVM中进行欺骗行为的机会。当applet从本地磁盘存储器中下载时,则不会调用字节码检验机。
在applet的执行过程中,applet的安全管理器对它进行强制地限制约束,包括:
(1) 不允许applet读写客户端的文件系统。然而,它能够读写源系统的文件。某些浏览器允许applet使用某个文件夹。严格地讲,applet只能访问客户端——客户端的文件。
(2) applet能够访问系统属性值的一部分,通过System.getProperty方法获得系统属性值。
(3) applet可以建立网络连接,该连接只能在下载applet的主机上通过Socket方式建立。这个约束是为了防止applet成为木马攻击者。
(4) applet不能在客户端启动其他程序。
(5) 不能通过调用System.exit方法来关闭Web浏览器。
(6) applet对System类定义的共享代码库的LoadLibrary方法无效。
(7) applet不能使用本地方法。本地方法是指用非Java语言编写的代码,并运行在JVM之外。因为无法确认它的运行结果,本地方法被认为是不安全的。