又一次Applet回顾[1]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

Flash的出现使Applet的地位受到严重影响;

  浏览器显示网页的原理
网页文件是普通的文本文件;
标记语言只能控制显示,但不具有
逻辑性,比如不可以判断用户的输入是否真确;

正是为了在瘦客户端实现交互,我们用
网页脚本;浏览器遇见脚本标签的时候
就用引擎来执行;
<script language="vbscript">
<!--
  ...
  ...
  ..
-->
也就是说,如果想要使用脚本,则浏览器必须
有调用脚本引擎的能力;
那么我们可以说applet是脚本吗?
好像不是啊!

IE在一段时间里去掉了了对Java的支持;
因此Applet被人们遗忘了很久;pity;
Sun与MicroSoft的仇恨!!
后来Sun把执行applet的虚拟机做成浏览器的
插件,你在安装jdk的最后时刻一定看到了
Java(TM) plugin 安装到IE的提示;

浏览器总是试图纠正用户的错误标签而不是
报错;

再次说明基础:
 init()被调用一次;
 每次进入包含applet的页面就调用一次
 start();
 浏览器离开包含applet的页面时调用stop()
 方法;
 //这说明applet在没被看见的时候不运行的,
 有效地节省了资源;
 destroy()在浏览器关闭时销毁applet对象;
 paint()在每次Applet的界面需要被画的时候被调用;
 paint(Graphics g)中g描述了Applet界面的环境;
 
一个定时器的实现思想:
 如果你的主线程程序强烈要求在特定的时间
 间隔就做出某一个动作,那么如果你使用本线程
 来睡眠的方法十分不合理:因为你的程序还希望做
 别的更有意义的事情而不是只是每个一个时间段
 就做那个机械的动作;所以我们可以用主线程来
 启动一个线程,让这个副线程睡眠一个时间间隔后
 回调主线程做出那个动作的方法;
 而整个过程中主线程根本就不要任何地关注;
 两种模式的区别:
 一:
 mainThread:
 {
  while(true)
  {
     Thread.sleep(400);
     action();
  }
 }
 二:
 mainThread
 {
  sonThread=new Thread();
  otheraction();
 }
 sonThread
 {
  while(true)
  {
       Thread.sleep();
       mainThread.action();
  }
 }
因为applet是运行在客户端而资源在服务器
端,所以不要在你写的Applet里使用绝对路径
访问资源;而且一个applet可能被卖到多个不同的
服务器上使用;
有一个原则就是:applet源文件和资源的相对
路径不要改变; 
 
Component.update(Graphics g)方法:
 repaint()方法调用update()方法;
 默认的系统实现的update()方法
 先调用了调用了paint()方法;
 
 最小化,最大化的暴光操作是直接
 调用paint()方法的;
 而调用repaint()方法则一定会
 通过update()方法来调用paint()方法;
 所以你有机会在覆盖update()方法,试图
 不调用paint()方法;
*****关于paint(),repaint(),update()方法的一些 试验与解释:
*****paint(Graphics g)方法就是在组件上绘图;
*****repaint()方法做以下调用:
 *****  调用update(Grpahics g)方法;
 ***** update(Graphics g)做以下调用:
  ***先调用clear()清除组件上已绘制图像;
  ***再调用paint(Graphics g)方法绘制图像;
***所以我们有这样一些试验:
 如果你没有重写update()方法,则每次调用repaint()之后,
 都可以在组件上重新绘制一副新图像;
 如果你重写的update()方法什么都没做,则每次调用repaint()
 方法后,你的组建上的图像不会变化;
 如果你重写的update()方法只调用了paint(Graphics g)而没有
 调用clear(),则每次调用repaint()之后,你的组件上的图像是重叠
 了新旧图像的图像;
****注意:repaint()方法可以手动调用从而间接调用了paint(Graphics g)方法;
   但是paint(Graphics g)是不能手动调用的;

****TMD面向对象就是牛!
 
Applet的相关知识:
 WWW浏览器是applet运行的容器,或者你
 就说是引擎吧!
 
 applet是浏览器的插件;
 
注意:容器才是真正的应用程序,插件只是容器能够使用的
函数;这么一来,我们知道,其实服务器上的应用
程序是Tomcat而不是我们写的servlet和jsp,
我们只是在给Tomcat写可以调用的插件而已;

servlet,ejb技术都是这种容器与插件的程序架构设计模式;

Applet的控制台输出:Java控制台;
控制台可以输出如同System.out.print()
之类的语句;

解释器一般有两个:
 MicroSoft vm;
 Sun Jre;
Applet的限制:
 不能启动执行其他的应用程序;
 不能进行文件I/O操作;
 不能调用本机代码;
 不能与Applet所在的主机之外的其他
 主机进行网络连接;
解释:如果恶意的Web服务器提供给用户下载
applet,如果applet被下载到客户机上能够进行
I/O操作和启动别的程序,那客户上的信息有可能被
发送到Web服务器上,或者客户机会受到病毒感染;
提供Applet的服务器将applet下载到客户机上,
如果在客户机上applet能够与提供applet的服务器之外
的主机连接,进行恶意攻击,那这个主机查回来
之后发现的元凶是这个客户机而不是提供applet
的服务器;


 <applet>标记
一个网页中可以有多个<applet>标记
<applet
  [archive=archiveList]  //预先要载入的资源,如.jar;
  code=appletFile.class
  width=pixels
  height=pixels
  [codebase=codebaseURL]
  [alt=alternateText]
  [name=appletInstanceName]//用于一个Applet调用另一个
  [align=alignment]         //applet,进行通信;
  [vspace=pixels]
  [hspace=pixels]
 >
  [<param name=appletAttribute 1 value=value>]
  [<param name=appletAttribute 2 value=value>]
 [apternameHTML]
 </applet>

getParameter()的参数对大小写是不敏感的;
但是我们应该保持一致;

  <object>标记
W3C协会建议人们用<object>标记代替<applet>标记;
可以使用jdk提供的HTMLConverter将<applet>
标记转换为<object>标记;

HTMLConverter的使用:
1,转换后的.html文件名与原来的.html文件名一样;

使用<object>标记,执行applet的Java解释器被
作为一个ActiveX插件引用;
这时候,插件是解释器而不是Applet程序本身了;

<object>中有一个属性是
classid来指定ActiveX控件的唯一标识号;
codebase = "http://java.sun.com/update/1.5.0
/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"
指定了虚拟机,如果机器上没有装,则会自动下载安装;

本文关键:又一次Applet回顾
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top