第八章:Applet基础学习

时间:2022-11-22 07:30:24

学习导读:在Java中,有两种类型的程序:应用程序(Application)和小应用程序(Applet)。Java Applet可以被HTML页面引用,并可以在支持Java的浏览器中执行,可以说Applet具有“激活因特网”的强大功能。在本章将讲述Applet的工作原理以及如何编写Applet程序。
  教学重点与难点:
  ●Applet的工作原理
  ●Applet程序与Application程序的区别
  ●Applet类与JApplet类
  ●Applet程序与Application程序的相互转换
  ●Applet与JAR文件
  8.1 Applet的基本工作原理
  Applet:
  Applet是一种很重要的java程序,是工作在浏览器上的java程序。编写Applet小程序必须要用到java.applet包中的Applet类,该类是java.awt.Panel类的子类。Applet默认的基本工作原理:编译好的字节码文件保存在特定的www服务器上,同一个或另一个服务器上保存着嵌入了该字节码文件名的html文件。
  当某一个浏览器向服务器请求下载嵌入了Applet的html文件时,该文件从服务器上下载到客户端,由浏览器解释html,当遇到<applet>,表明它嵌有一个Applet,浏览器会根据这个Applet的名字和位置自动把字节码从服务器上下载到本地,并利用浏览器本身拥有的java解释器执行字节码。
  Applet类:
  Applet程序在结构上必须创建一个用户类,该类的父类是系统的Applet类。通过这个子类,完成Applet与浏览器的配合。
  import java.applet.Applet;
  public class MyApplet extends Applet;
  1、Applet类
  该类存在于java.applet包中,具有的作用:
  1)包容和排列其他的界面元素,如按钮、文本框等。
  2)响应它所包容范围内的事件,或把事件向更高层传递。
  另外它还有一些与浏览器和Applet生命周期有关的方法。
  Applet类的主要方法
  在实际运行Applet中,浏览器在下载字节码的同时,会动创建一个用户Applet子类的实例,并在适当事件发时自动调用该实例的几个主要方法:
  init():用来完成主类的初始化工作。字节码下载后,浏览器将创建一个Applet类的实例并调用它从Applet类那里继承来的init方法。用户程序可以重载父类的init方法,定义一些初始化操作。
  start():用来启动浏览器运行Applet的主线程。浏览器在调用init()初始化Applet类的实例后,将接着自动调用start()方法,加入当前实例被激活时要实现的功能。
  除了在init初始化后被调用外,start方法在Applet被重新启动时也会被自动调用:一是用户使用了Reload操作;二是浏览器重新加载,那么其中的Applet实例就会被重新启动并调用start方法,但是init方法只能被调用一次。
  paint():在Applet的界面中显示文字、图形和其他界面元素。在下列情况下使用paint():
  1)Applet被启动之后,自动调用paint()来重绘
  2)Applet所在的浏览器窗口改变时使用paint重画界面。
  paint方法有一个Graphics类的对象g作为参数。它用来完成一些较低级的图形用户界面操作,当一个Applet类实例被初始化并启动时,浏览器将自动生成一个Graphics类的实例g,并把g作为参数传递给Applet的paint方法,就可以绘制Applet的界面。
  stop():当用户浏览其他网页,或切换到其他应用时,浏览器会暂停执行的Applet线程,暂停前首先自动调用stop方法。
  destroy():当用户退出浏览器时,浏览器会自动调用Applet实例的destroy方法来完成一些释放资源、关闭连接等操作。
  HTML 文件参数
  Applet 时需要嵌入在HTML 文件并依赖浏览器运行的程序。在HTML 文档中嵌入Applet 需要使用一组约定好的特殊标记:<applet<</applet>, 至少需要三个参数code,height,width。
  总结,Applet由浏览器自动调用的主要方法init(),statr(),stop(),destroy()分别对应了Applet从初始化,启动,暂停到消亡的生命周期的各个阶段。
  8.2 Applet类与JApplet类
  java.applet包包含有三个接口:AppletContext接口、AppletStub接口、AudioClip接口及一个Applet类。
  1.AppletContext接口
  提供Applet环境文件信息,诸如Applet所在的文件有哪些Applet,或是在状态栏上显示信息。
  2.AppletStub接口
  作为Applet与浏览器环境的沟通接口。
  3.AudioClip接口
  提供音频的接口,音频文件必须是AU、AIFF、WAVE、或者MIDI格式。
  4.Applet类和JApplet类
  Applet不能单独自己执行,而必须嵌入在别的软件如浏览器上,或是通过appletviewer来执行,而Applet类提供了Applet与其所执行环境间的标准接口。Applet类也提供了使Applet能在浏览器上执行的骨干结构,由init、start、stop、destroy这四个方法所构成。
  利用Applet类提供的四个方法init、start、stop和destroy可以构造任意Applet框架,JApplet类继承了这四个方法 。
  在实际应用中,用户需要重载这些方法来构造自己需要的Applet。
  (1)public void init()
  该方法用于Applet的初始化。当Applet被第一次加载时,该方法会被自动调用。在这个方法中,可以做一些必要的初始化工作,这些内容包括是创建和初始化程序运行所需要的对象实例,把图形或字体载入内存,处理PARAM参数等。
  (2)public void start()
  该方法用来启动浏览器运行Applet的主线程。调用init 方法将Applet的初始化工作完成之后,start方法会被自动调用;当用户刷新包含Applet的页面或者从其它页面返回包含Applet的页面时,start方法也会被自动调用。
  也就是说,start方法可以被多次调用,这与init方法是有区别的。基于这样的原因,可以把只调用一次的代码放在init方法中,而不能放在start方法中。
  (3)public void stop()
  该方法在用户离开包含Applet的页面时会被自动调用。和start方法一样,stop方法也可以被多次调用。该方法的作用是,当用户离开包含Applet的页面时,停止一些耗费系统资源的活动,如播放动画等。如果在Applet中没有动画、音乐文件播放,那么通常可以不使用这个方法。
  (4)public void destroy()
  当用户正常关闭浏览器时,浏览器会调用destroy方法。该方法用于回收系统资源,如回收图形用户界面的系统资源、关闭连接等。至于Applet实例本身,会由浏览器来负责从内存中清除,不需要在destroy方法中来清除。
  Applet类提供的四个方法init、start、stop和destroy分别对应了Applet的初始化、启动、暂停直到消亡的各个阶段。
  JApplet类是Swing Applet的超类,所以如果想使用Swing集合来实现Applet,那么编制的Applet应该继承JApplet类。
  8.3.2 Applet与Application的区别
  (1)Java Applet程序是在WWW浏览器环境下运行,即不是完整独立运行程序;
  (2)运行Java Applet程序的解释器不是独立的软件,而是嵌在WWW浏览器中作为浏览器软件的一部分。
  (3)Java Applet程序中不需要有main方法,但是Java Applet程序的主类必须是类库中已定义好的类Applet或JApplet的子类。
  (4)Java Applet程序可以直接利用浏览器或AppletViewer提供的图形用户界面,而Java Application程序则必须另外书写专用代码来营建自己的图形界面。
  8.3 Applet安全基础
  Applet被设计为从远程站点下载然后在本地执行,所以安全问题非常重要。如果用户在游览器中启用了Java,那么浏览器就会自动下载网页中的Applet代码并执行。用户没有机会来确认或者停止Applet的运行。基于这样的原因,与Application应用程序相比,Applet被作了限制。
  Applet的限制执行环境常常称作“沙箱(sandbox )”。运行在沙箱中的Applet不能更改或探查用户的系统。
  当运行在沙箱中时:
  (1)Applet不能读写本地计算机的文件系统,也不能运行任何本地可执行程序。
  (2)Applet不能同除它们的下载处的服务器(该服务器称作原始主机)以外的其他任何主机通信。这条规则使得Applet不能探查企业内部网上的资源。
  (3)Applet只能获取本地计算机中的以下信息:当前使用的Java版本;操作系统的名字和版本;用来分离文件、路径以及行的字符。除此以外,Applet不能获取任何其它关于本地计算机的信息。
  (4)Applet弹出的所有窗口都会带有一警告消息,告诉用户这是一个Applet。
  因为Java解释器会检查所有的危险指令和程序区域,所以一个带有敌意的Applet不能覆盖系统内存、改变操作系统赋予的特权或者使计算机崩溃。
  在某些情况下,这些限制显得过于严格。为了充许在不同情况下使用不同的安全级别,Java引入了签名Applet。
  一个签名Applet带有一个能够表明签名者特征的证书。加密技术保证了这样的证书不可能被伪造。如果信任签名者,那么可以选择给该Applet额外的特权。被完全信任的Applet可以获得同本地应用程序一样的访问特权。
  8.4 向Applet传递参数
  如同Java Application可以使用命令行来接受用户参数一样,也可以向Applet传递参数。不过在Applet中,这个任务要通过HTML文件来传递。在HTML文件中有一个专门的标记<PARAM>可以向Applet传递用户参数。
  【例8.2】通过HTML文件向Applet传递参数
  源程序:ParamApplet.java
  HTML文件:ParamApplet.htm
  8.5 Application与Applet组合
  有时需要实现这样一个源文件:它既可作为应用程序运行又可作为小应用程序运行。
  实现思想是这样的:创建一个小应用程序,这个小应用程序包含一个main方法。这个main方法把JFrame实例化,而且还创建这个小应用程序的一个实例。在调用小应用程序的init方法后,窗体用该小应用程序的内容窗格来替代该窗体的内容窗格。这个窗体接着设置其边界和标题。并把它的可见性设置为true。
  8.6 Applet与JAR文件
  8.6.1 JAR文件概述
  JAR(Java Archive)是一种与平台无关的文档格式,一般叫Java存档,它相当于一种压缩格式,可以把众多的文档合成一个文件。
  大多数的Applet都由多个类组成,使用浏览器来浏览这样的Applet时,由于一个文件需要一个连接,所以浏览器需要使用多个连接,这样在一个低速的网络上加载一个Apple需要好几分钟。这里值得注意的是,加载Apple需要较长的时间的原因并不是因为类文件太大,关键的原因是建立到服务器的连接需要的时间长。
  对于Applet来说,JAR文件可以将多个需要的类文件合并为一个单一的文件。这是很有意义的,这样这些类文件可以作为一个整体使用一个HTTP事务下载到浏览器中,从而大大提高浏览速度。
  8.6.2 jar命令
  jar命令格式如下:
  jar [选项1]……[选项n] 文件名1 文件名2……
  jar命令的选项:
  c 创建新的存档,并把文件添加至其中,如果一个文件名是一个目录,它将被递归处理
  t 列出存档内容的列表
  x 展开存档中的命名的(或所有的)文件
  u 更新已存在的存档
  v 生成详细输出到标准输出上
  f 指定存档文件名
  m 包含来自标明文件的标明信息
  0 只存储方式;未用ZIP压缩格式
  M 不产生所有项的清单(manifest)文件
  i 为指定的jar文件产生索引信息
  C 改变到指定的目录
  8.6.3 JAR缓存
  在默认的情况下,浏览器使用浏览器的缓存来缓存Applet代码。在这种情况下,如果访问一个曾经访问过的包含了Applet的站点,并且浏览器缓存仍然包含所需要的JAR文件,并且这个JAR文件没有改变,那么这个JAR文件就不会被重新下载。
  但是在正常情况下,浏览器缓存并不能够保持足够长的时间。比如,如果每个月只访问一次某个站点,那么极有可能每次都要重新下载并刷新缓存。
  Java插件支持一种机制来“粘滞”Applet,如果我们想让一个Applet停留在用户端的时间更长,就需要使用OBJECT标记来指定CACHE_OPTION、CACHE_ARCHIVE和CACHE_VERSION键的值。
  CACHE_VERSION键用来代表CACHE_ARCHIVE列表中指定的JAR文件需要的版本号码。如果这些版本已经在客户机上,那他们将不必被下载。
  本章小结
  Java Applet是一种特殊的Java程序,我们称之为“小应用程序”。Applet可以被HTML页面引用,并可以在支持Java的浏览器中执行,可以说Applet具有“激活因特网”的强大功能。
  从本质上讲,Applet就是一个扩展了java.applet.Applet类的Java类。Applet类提供了使Applet能在浏览器上执行的骨干结构,而这个骨干是由init、start、stop、destroy这四个方法所构成。利用Applet类提供这四个方法可以构造任意Applet框架。在实际应用中,我们需要重载这些方法来构造自己需要的Applet。
  Applet的限制执行环境常常称作“沙箱(sandbox )”。运行在沙箱中的Applet不能更改或探查用户的系统。所以一个带有敌意的Applet不能覆盖系统内存、改变操作系统赋予的特权或者使计算机崩溃。
  JAR(Java Archive)是一种与平台无关的文档格式,我们一般叫Java存档,它相当于一种压缩格式,可以把众多的文档合成一个文件。大多数的Applet都由多个类组成,JAR文件可以将多个需要的类文件合并为一个单一的文件。这样这些类文件可以作为一个整体使用一个HTTP事务下载到浏览器中,从而大大提高浏览速度。