`

深入Applet技术

阅读更多
    本文档主要从什么是Applet、Applet在浏览器环境下如何运用以及如何突破Applet的安全限制。

一、什么是Applet
    Java Applet 是用Java 语言编写的小应用程序,这些程序是直接嵌入到页面中,
    由支持Java的浏览器(IE 或 Nescape等)解释执行,能够产生特殊效果的程序。
    它可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其Java支持的网页。

二、Applet用法
    1.确定包含在HTML文档中的Java Applet程序已经存在;

    2.调用"applet"格式(以Java01.class 为例)
      < applet code="Java01.class" codebase="javam" width=100 height=60 vspace=2 
        hspace=3 align="top" name="Java01" alt="你的浏览器不支持 Java Applet 程序"  
      ></applet>

    A.code属性:定义调用的Java Applet 程序名,要注意全名和大小写。

    B.codebase属性:定义Java Applet 程序的路径或地址(URL),当Java Applet与HTML文档不在同一目录时用它来定位,
      上面调用格式中codebase="javam"说明该Java Applet程序存放在"javam"目录里
      (建议将Java Applet 程序和HTML文档放在同一目录)。

    C.width和height属性:给出Java Applet程序显示区域以像素为单位的宽度和高度。

    D.vspace和hspace属性:用来设置以像素为单位的竖直和水平边距。

    E.align属性:控制Java Applet的对齐方式,取值如下:
      left(屏幕的左边)
      right(屏幕的右边)
      top(与该行中最高项的顶部对齐)
      texttop(与该行文本的顶部对齐)
      middle(使该行的基线与该Java Applet程序显示域的中间对齐)
      absmiddle(使该行的中间与该Java Applet程序显示域的中间对齐)
      baseline(使该行的基线与该Java Applet的程序显示域的底部对齐)
      bottom(使该行的基线与该Java Applet的程序显示域的底部对齐)
      absbottom(使该行的底部与图像的底部对齐)

    F.archive属性:用逗号分隔的归档文件列表(HTML 4.0 )

    G.object属性:序列化的applet文件(HTML 4.0) 

    H.name属性:为应用的Applet 实例赋一具体的名字。

    J.alt属性:为不支持Java Applet程序的浏览器显示你替代的文字,如果支持该属性被忽略。

    I.另:为不支持Java Applet程序的浏览器显示你替代的文字,
      还可以用在<applet>与</applet>之间插入文字的方法进行,反之该插入文字被忽略不显示。

    3.向 Applet 传递变量
    A.确定该 Java Applet 程序所接受的变量名,比如 size、font两个变量;

    B.在<applet></applet>之间输入<param>标记,
      <applet code="Java01.class" codebase="javam" width=100 height=60 >
      <param>
      </applet>

    C.给<param>标记加入name属性并设置为Java Applet中将接收值的变量名
      <applet code="Java01.class" codebase="javam" width=100 height=60 >
      <param name="size">
      <param name="font">
      </applet>

    D.加入value属性为前面定义好的变量赋值。
      <applet code="Java01.class" codebase="javam" width=100 height=60 >
      <param name="size" value="5" >
      <param name="font" value="bold" >
      </applet>

    E.当浏览器遇到<applet>标记中的<param>标记时,它读进变量名和赋予的值传递给当前Java Applet中的命名变量。


三、Applet安全限制
    在缺省的情况下,Applet在安全方面受到诸多的限制,几乎不能对系统进行任何“读”“写”的操作。
    下面受限制的功能:
     不允许Applet读本地系统上的文件。例如,下面的代码将出错:
     File readFile=new File("/etc/passwd");
     FileInputStrean readIn=new FileInputStream(readFile);

     不允许Applet创建,修改或删除本地系统的文件。例如,下面的代码将出错:
     //不能创建文件
     File writeData=new File("write.txt");
     FileOutputStream out= new FileOutputStream(writeData);
     cut.write(1);

     //不能修改或删除文件,不能更改文件名
     File oldName =new File("one.txt");
     File newName= new File("two.txt");
     oldName.renameTo(newName);
     File removeFile=new File("inport.dat");
     removeFile.delete();

     不允许Applet检查本地系统上文件是否存在。例如,下面的代码将出错:
     File isHere = new File("grades.dbm");
     isHere.exists();

     不允许Applet在本地系统上创建目录。例如,下面的代码将出错:
     File createDir= new File("mydir");
     createDir.mkdir();

     不允许Applet检查目录的内容。例如,下面的代码将出错:
     String[] fileNames;
     File lookAtDir= new File("/user/hisdir");
     fileNames = lookAtDir.list();

     不允许Applet检查文件的属性。例如,不允许检查文件的尺寸、类型、最后更改时间等、
     例如,下面的代码将出错:
     File checkFile= new File("this.dat");
     ling checkSize;
     boolean checkType;
     long checkModTime;
     checkSize= checkFile.length();
     checkTyty= checkFile.isFile();
     checkModTime= checkFile.lastModified();

     Applet不能创建或装载Applet的机器的网络连接。
     无论使用何种不同的网络Java类(包括:java.net.Socket,java.net.URL,and

     java.DatagramSocket),这个规则都成立。例如,假设Applet被下载到www.trusted.org,
     下面的代码将出错:
     //不能打开TCP socket.
     Socket mailSocket = new Socket("mail.nutrusted.org",25);

     //不能使用URL对象
     URL untrustedWeb=new URL("http://www.untrusted.org/");
     URLConection agent= untrustedWeb.openConnection();
     agent.connect();

     //不能使用UDP数据报发送数据
     InetAddress thetSize=new InetAddress("WWW.untrusted.org");
     int thatPort=7;
     byte[] data= new byte[100];
     DatagramPacket sendPacket= new DatagramPacket(data,data.lenght,thatSize,thatPort);
     DatagramSocket sendSocket=new datagramSocket();
     sendSocket.send(sendPacket);

     Applet不能充当网络服务器,监听或接收来自远程系统的连接请求。
     例如,下面的代码将出错:
     ServerSocket listener= new ServerSocket(8000);
     listener.accept();

     Applet不能执行任何本地计算机上的程序。例如,下面的代码将出错:
     String command="DEL\AUTOEXEC.BAT";
     Runtime systemCommands=Runtime.getRuntime();
     systemCommands.exec(command);

     不允许Applet装载动态库或定义本地方法调用。例如,下面的代码将出错:
     Runtime systemCommands= Runtime.getRuntime();
     systemCommands.loadLibrary("local.dll:);

     在Java环境中,设置了一些标准的系统属性,
     jaxa.lang.System.getProperty(String kcy) 方法可以出来访问这些属性,
     对于Applet而言,某些系统属性是只读的。这些属性包括:file.separator,
     java.class.path,java.class.version,java.home,java.vendor,
     java.vendor.url,java.version,line.separator,os.arch,os.name,
     os.version,path.separator,user.dir,user.home,user.name。
     Applet不能操纵不在自己线程组中的任何线程。
     Applet不能关闭JVM。例如,下面的代码将出错:
     Runtime systemCommands=Runtime.getRuntime();
     systemCommands.exit(0);
     system.exit(0);
     Applet不能创建SecurityManager或ClassLoader实体。
     这些策略表达了一些严格的限制,应该清楚在缺省的情况下,
     Applet可以做什么,不可以做什么,正确对待一些非编程方面的错误。


四、Applet数字签名
    步骤一:将Applet Class打成Jar包
  如:在命令行中执行以下的语句:
  jar -cvf MyApplet.jar class

    步骤二:(在网页中嵌入Applet)(如何在Html嵌入Apple方法见附录)
  下面是嵌入Applet部分的写法:
    <APPLET
      CODEBASE = "."
      CODE = "jcomponent.FileReaderApplet.class"
      ARCHIVE ="MyClass.jar"
      NAME = "TestApplet"
      WIDTH = 400
      HEIGHT = 300
      HSPACE = 0
      VSPACE = 0
      ALIGN = middle
    >
    </APPLET>

    步骤三:(生成证书及签名)
  1、keytool -genkey -keystore pepper.store -alias pepper
  这个命令用来产生一个密匙库,执行完毕后应该在c:/admin中产生一个pepper.store的文件,
    这里的pepper是我自己的名字,你可以对它进行修改。另外在执行命令的时候还有提示
    你输入密匙库的密码,这里你一定要记住,否则后面要用的时候无法输入。

  2、keytool -eXPort -keystore pepper.store -alias pepper -file pepper.cert
  这个命令用来产生签名时所要用的证书,同样这里的pepper也可以换成你自己需要的名字。
    这个命令执行完后在c:/admin中产生一个pepper.cert的文件。

  3、 jarsigner -keystore pepper.store MyApplet.jar pepper
  这个命令用上面产生的证书将我们的jar文件进行了签名。

    步骤四:新建一个策略文件,并把这些策略文件加入(修改文件)

  1、在c:/admin中产生一个名为applet.policy的文件,其内容如下:
  keystore "file:c: /admin/pepper.store", "JKS";
  grant signedBy "pepper"
  { permission Java.io.FilePermission "<<ALL FILES>>", "read";=;
  这个文件让由pepper签名的Applet拥有本地所有文件的读权限。

  2、修改${java.home}/jre/lib/security目录下的java.security,找到下面这两行:
  policy.url.1=file:${java.home}/lib/security/java.policy
  policy.url.2=file:${user.home}/.java.policy

  在下面添写第三行
  policy.url.3=file:c: /admin/applet.policy
  完成这个修改后我们在前面创建的applet.policy文件才有效。

    步骤五:(转换html文件)
  运行前面提到的HTMLConvert工具,将原有的FileReaderApplet.html转化成下面的形式:
    <!--"CONVERTED_APPLET"-->
    <!-- CONVERTER VERSION 1.3 -->
    <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    WIDTH = 400 HEIGHT = 300 NAME = "TestApplet" ALIGN = middle VSPACE = 0 HSPACE=0
    codebase="http://java.sun.com/prodUCts/plugin/1.3/
    jinstall-13-win32.cab#Version=1,3,0,0">
    <PARAM NAME = CODE VALUE = "jcomponent.FileReaderApplet.class" >
    <PARAM NAME = CODEBASE VALUE = "." >
    <PARAM NAME = ARCHIVE VALUE = "MyApplet.jar" >
    <PARAM NAME = NAME VALUE = "TestApplet" >
    <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
    <PARAM NAME="scriptable" VALUE="false">
    <COMMENT>
    <EMBED type="application/x-java-applet;version=1.3"
    CODE = "jcomponent.FileReaderApplet.class" CODEBASE = "."
    ARCHIVE = "MyApplet.jar" NAME = "TestApplet" WIDTH = 400
    HEIGHT = 300 ALIGN = middle VSPACE = 0 HSPACE = 0 scriptable=false
    pluginspage="http://java.sun.com/products/plugin/1.3/
    plugin-install.html">
    <NOEMBED>
    </COMMENT>
    </NOEMBED>
    </EMBED>
    </OBJECT>
    <!--
    <APPLET CODE = "jcomponent.FileReaderApplet.class"
    CODEBASE = "." ARCHIVE = "MyApplet.jar" WIDTH = 400 HEIGHT = 300
    NAME = "TestApplet" ALIGN = middle VSPACE = 0 HSPACE = 0>
    </APPLET>
    -->
    <!--"END_CONVERTED_APPLET"-->
  大家不要看到这里的写法很复杂,但是这些都是由HTMLConvert工具自动实现的。
    这个工具有命令行和图形界面两种运行方式。
  好了,现在这个Applet可以运行读写文件的功能了。
    如果你要考虑在Internet上实现这个Applet,那么你也不需要在所有的客户端均做上面的步骤,
    你只需要在你的服务器上创建一个目录,   
    例如c:/admin,将这个目录映射为www.testApplet.com/admin。
    这里的www.testApplet.com是一个假定的网址,将pepper.cert、pepper.store、
    FileReaderApplet.html、MyApplet.jar以及applet.policy放在这个目录中,
    然后修改applet.policy文件如下:
  keystore "http:// www.testApplet.com/admin/pepper.store",
  "JKS";grant signedBy "pepper"{
    permission java.io.FilePermission "<<ALL FILES>>", "read";};

  3、而每个客户端仅仅需要修改一下它们的${java.home}/jre/lib/security
    目录下的java.security文件如下:
  policy.url.1=file:${java.home}/lib/security/java.policypolicy.url.2=
    file:${user.home}/.java.policypolicy.url.3=
    http:// www.testApplet.com/admin/applet.policy

  当然每个客户端还是需要安装JRE的。
    Height  Applet在Html页面上的高度
   Name  Applet在Html页面上的名称,用于区名一个Html页面上的多个  
    AppletCode  Applet类名,必须带后缀”class”当没有属性archive时,
    直接写类名当有属性archive时,必须带包名Codebase Applet的类相对路径,
    相对于Html页面位置Archive Applet所在Jar包的文件名
   标签< PARAM>的属性介绍
   属性     含义
   Name  Applet传入的参数名
   Value  Applet传入的参数值
   当Applet 为一个Class类文件嵌入的写法
   属性Code ==========Applet类名,必须带后缀名
   属性CodeBase ---------------Class类文件相对于Html页面的相对     路径
   Applet为一个JAR包,嵌入Html的写法
   属性Code ==========Applet类名,包括包名
   属性CodeBase ----------------Applet JAR包相对于Html页面的相对路径
   属性Archive -----------------------Applet Jar包文件名

五、Applet与js调用
    javascript与applet之间能够相互通讯给我们带来了很多方便,Java与JavaScript互相补充,
    以开发功能更完美的Web应用程序。B/S下能够充分利用java的优势,给我们带来更多的网络体验,
    方便用户。我用的比较多的是利用Swing组件开发的应用程序利用applet实现B/s下架构, 这样能
    够充分显示Swing组件的优势,便于系统升级,便于维护;还有就是在WEB下,有时客户端要使用
    本地的硬件资源,我所知道的是通过applet来实现,通过applet去调用javaAPI
   (jni,javacomm20-win32【详见http://www.iteye.com/topic/64859】)来实现。
    不知道有没有类似applet的实现方式,我想应该有的。

    我们具体来看看javascript与applet之间到底是怎样通讯的呢?
    1.JavaScript访问Applet
    代码
    1. <applet name="appletName" ....../>  
    2. //JavaScript访问Applet属性  
    3. window.document.appletName.appletField 
        (属性必须是public的,"window.document."也可以不写)  
    4. /JavaScript访问Applet方法  
    5. window.document.appletName.appletMethod 
        (方法必须是public的,"window.document."也可以不写)  

    2.Applet访问JavaScript
    Live Connect提供了Java与JavaScript的接口,可以允许在Java Applet小程序中使用JavaScript。
    需要用到一个jar包,在C:\WINNT\java\Packages目录下找,大概有5M多,
    其实就是打开看哪个有netscape.javascript.JSObject。如果没有装个NetScape或从网上下都可以。
    可以把它重命名为netscape.jar(不是必须的),一定要加入到classpath,目的是使开发的时候能够编译。
    注意:部署时不需要包括netscape.jar,因为整个包会下载到客户端,影响速度。
    代码
    1. //引入netscape类  
    2. import netscape.javascript.JSObject;   
    3. import netscape.javascript.JSException; //可允许在小程序中处理异常事件   
    4.  
    5. win=JSObject.getWindow(this); // 获取JavaScript窗口句柄,引用当前文档窗口   
    6. doc=(JSObject)win.getMember("document"); // 访问JavaScript document对象   
    7. form=(JSObject)doc.getMember("textForm"); //访问JavaScript form对象   
    8. textField=(JSObject)form.getMember("textField");访问JavaScript text对象   
    9. text=(String) textField.getMember("value"); //获取文本区的值   
    10.  
    11. // 调用JavaScript的alert()方法   
    12. win.eval("alert(\"This alert comes from Java!\")");   
    13.  
    14. // 调用JavaScript的myFunction(message)方法  
    15. win.call("myFunction", new Object[]{"Hello"});//参数用数组的形势表示。 

    注意:你必须在<applet/>标记中加入MAYSCRIPT才能够调用JSObject对象,
    不然会抛出JSException异常。你也不必初始化他们,在什么地方用就在什么地方用吧。

    本文档转载于互联网,转载出处,已不记得了。如果网友知道的话,麻烦告之我。谢谢!
分享到:
评论

相关推荐

    java Applet技术文档

    这个Java Applet技术文档对于想要深入理解Web客户端编程的开发者来说是一份宝贵的资源。通过学习,你可以掌握如何使用Java创建动态的、交互式的网页元素,以及如何应对与安全性和跨平台性相关的挑战。随着技术的发展...

    Java语言Applet编程技术.

    - "Java语言Applet编程技术_10203922"这个压缩包可能包含详细的教程、示例代码和练习,帮助你深入理解Applet编程。 - 学习过程中,你可以参考官方Java教程、在线文档以及各种编程论坛,如Stack Overflow,解决遇到...

    深入java虚拟机——applet 演示

    本篇将深入探讨Java虚拟机与Applet的相关知识点。 1. Java虚拟机(JVM) JVM 是Java平台的核心,它的主要职责是执行Java字节码。它包括类装载器、运行时数据区、执行引擎、本地方法接口和本地方法库。JVM 的设计...

    Applet网页游戏开发

    "Applet网页游戏开发"的主题涵盖了如何利用Java Applet技术设计和实现网页上的游戏。 首先,我们需要了解Java Applet的基础。Applet是一种特殊的Java类,它继承自Java的`java.applet.Applet`类或者`javax.swing....

    jasperreports-applet-5.1.0.jar

    在5.1.0版本中,引入了applet技术,使得用户能够通过浏览器实现报表的打印,极大地扩展了其在Web环境中的应用可能性。本文将深入探讨JasperReports Applet 5.1.0的核心特性和使用方法。 一、JasperReports基础 ...

    Java Applet 入门教程

    总之,Java Applet作为早期的Web交互技术,对于理解Java的历史和Web应用的演进具有重要意义。虽然现在已不常用,但学习它的概念和工作原理仍然有助于理解现代Web开发中的类似概念。通过深入学习和实践,可以更好地...

    浅析Java Applet技术在网络管理中的研究及应用.zip

    Java Applet技术是Java平台早期的一种重要特性,主要用于在Web浏览器中执行...通过深入研究《浅析Java Applet技术在网络管理中的研究及应用》,我们可以更好地理解过去的技术发展历程,为未来的网络管理提供历史参考。

    java applet程序案例

    Java Applet程序案例是关于...通过分析和修改这些代码,你可以深入理解Applet的工作机制,并从中学习如何在Web环境中实现动态交互。虽然Applet已不常用,但它的概念和技术原理对于理解现代Web应用的开发仍然有所帮助。

    java applet实例讲解

    本文将深入讲解Java Applet的概念、工作原理以及如何通过实例进行学习。 一、Java Applet概述 Java Applet是Java平台的一个组成部分,主要用于在网页中嵌入动态内容。它们由Java编写的类组成,这些类继承自`java....

    java applet 简单案例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者在浏览器中嵌入可执行的小程序,为用户...通过简单的案例,你可以快速掌握Applet的基本概念和编程模式,这将对深入学习Java和其他Web技术有所帮助。

    applet例子

    这个"applet例子"提供了实践applet编程的机会,通过编写和运行简单的applet程序,可以深入理解Java applet的工作原理和生命周期。虽然现代Web开发更倾向于使用JavaScript和其他技术,但理解applet的历史和工作方式...

    applet教程

    本教程将深入探讨Applet的基础知识、工作原理以及如何创建和部署一个简单的Applet应用。 1. **Applet概述** - Java Applet是Java平台的一部分,它通过浏览器插件在客户端运行。 - Applet主要用于增强网页的交互性...

    APPLET 实例讲解

    Java Applet是Java技术早期的一种应用形式,主要用于在Web浏览器中执行小应用程序。它通过Java插件嵌入到HTML页面中,为用户提供交互式的、动态的内容。本篇将深入讲解APPLET实例,帮助你理解其工作原理和使用方法。...

    Java Applet实例讲解

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型Java程序。这些小程序可以增强网页的功能,比如交互式表单、动态图像或者简单的游戏。在本实例讲解中,我们将深入...

    JavaApplet实例讲解以及教程大全

    本教程全面覆盖了JavaApplet的基础知识、实战技巧和常见问题,旨在帮助学习者深入理解并掌握这一技术。 1. **JavaApplet基本概念** - **Applet生命周期**:JavaApplet的生命周期包括初始化、加载、显示、暂停、...

    做一个applet测试

    本文将深入探讨如何创建和实现一个能够提示用户下载插件的Applet。 首先,我们要了解什么是Applet。Applet是Java语言的一个子类,通常是`java.applet.Applet`或`javax.swing.JApplet`,它可以在HTML页面中嵌入,由...

    0002_Applet理解_demo

    根据提供的文件信息,我们可以深入探讨Applet的基本概念及其在示例中的应用。 ### Applet基本概念 Applet是一种特殊的Java程序,它可以在Web浏览器中运行。Applet的主要优点在于其可移植性和安全性。用户可以通过...

    Java_Applet

    这个Java Applet专辑提供了一个全面学习和实践Java Applet编程的平台,通过实例教学,帮助开发者深入理解Applet的原理和应用,虽然现在Applet的使用已经减少,但它的知识仍然对于理解Web开发的历史和技术变迁有其...

    关于 js 和 applet 相互调用的例子

    让我们深入到例子中,假设我们有一个名为"AppletExample.jar"的Applet,它包含一个名为`MyApplet`的类,这个Applet需要与页面上的JS进行通信。在HTML页面中,我们先定义Applet: ```html &lt;applet code=...

Global site tag (gtag.js) - Google Analytics