本文档主要从什么是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异常。你也不必初始化他们,在什么地方用就在什么地方用吧。
分享到:
相关推荐
本教程“Building a Java applet”将深入讲解如何构建和使用Java Applets。 一、Java Applet简介 Java Applet是Java平台的一部分,主要用于增强网页的交互性。它们可以被嵌入到HTML页面中,由Java Virtual Machine ...
Java Applet是Java技术在Web应用中的一个早期概念,它允许开发者...通过研究这个"my_Applet.rar",可以深入了解Java Applet的编程技术,以及如何在20世纪90年代末至21世纪初的Web环境中实现动态和交互式的用户体验。
Java Card技术是智能卡开发中的一...通过阅读和理解`apdu.java`源代码,你可以了解到如何设计和实现一个基本的Java Card Applet,以及如何处理APDU命令来实现特定的功能。这是一个深入理解智能卡技术及其应用的好起点。
首先,让我们深入了解一下Calculator(计算器)部分。在Java中,可以使用基本的算术运算符(如+,-,*,/)来构建一个简单的计算器。对于更复杂的计算,可能需要利用`java.math`包中的`BigInteger`和`BigDecimal`类...
Java Applet是一个嵌入在网页中的小程序,由Java语言编写,可以提供丰富的交互性功能,如本...对Java初学者来说,通过这个项目可以深入理解Java GUI编程和事件驱动编程模型,同时还能学习到如何在程序中添加音频效果。
本教程将引导初学者了解Java Applet的基本概念、工作原理以及如何创建和运行一个简单的Applet程序。 一、Java Applet概述 Java Applet是Java平台的一部分,它通过Java虚拟机(JVM)在Web浏览器中执行。Applet通常...
Java源代码-MP3.rar是一个包含...总的来说,这个Java MP3播放器项目涵盖了Java编程、音频处理、网络应用和Applet技术等多个方面,对于想要深入学习Java技术特别是多媒体处理的开发者来说,是一个有价值的实践案例。
通过研究这个Applet的源代码和相关资源,我们可以深入理解Java图形编程、事件处理以及如何将Java程序嵌入到Web环境中。虽然Java Applet已不再是主流,但学习其工作原理对理解现代Web开发技术的历史和演进依然有价值...
首先,让我们深入了解一下Java多线程。在Java中,多线程是指在单个应用程序中同时执行多个不同的任务。这可以通过创建并运行多个线程来实现。Java提供了两种方式来创建线程:通过继承Thread类或实现Runnable接口。...
在Java Applet的编程中,你需要了解以下关键知识点: 1. **Java基础**:首先,你需要掌握Java的基本语法,包括类、对象、方法、变量等概念,以及面向对象编程的基本原则。这是编写任何Java程序的基础,包括Applet。...
本专辑主要探讨了Java Applet的编程技巧与实例,通过一系列的文章深入解析了如何有效地利用Java Applet进行Web开发。 首先,"Java Applet 编程技巧实例专辑1.htm"至"Java Applet 编程技巧实例专辑7.htm"这七个文件...
虽然现代Web开发中Applet已较少使用,但了解其原理和用法对理解Java的Web历史和技术发展仍有价值。 2. **Java Swing**:Swing是Java GUI(图形用户界面)库的一部分,提供了丰富的组件和布局管理器来创建桌面应用...
在Java编程语言中,开发一个时钟程序是一个常见的练习,对于初学者来说,这是一个很好的学习项目,因为它涉及到图形用户...通过学习和理解这个程序,开发者可以深入了解Java GUI编程、事件处理以及线程管理等核心概念。
如果你打算深入理解Web Applet,你需要掌握Java编程基础,了解Web开发背景,以及熟悉如何在HTML中嵌入和调用Applet。虽然现代Web开发中Applet的使用已经减少,但它仍然是Java历史和技术演进的一个重要部分。
根据给定的信息,本文将详细解析“Java Applet开发大鱼吃小鱼游戏”的关键知识点,包括游戏的设计理念、技术实现细节以及相关的Java Applet编程技巧。 ### 1. Java Applet简介 Java Applet是一种可以在Web浏览器中...
通过深入学习和实践这些内容,你将能够熟练掌握Java Applet的开发,并对面向对象编程有更深入的理解。尽管Applet技术已逐渐淡出,但其背后的编程思想和技巧在其他Java应用中依然有着广泛的应用。
总的来说,这个压缩包提供的是一个基于Java Applet的简单网页密码保护系统,通过学习和分析,我们可以深入了解早期Java Web开发和Applet技术。然而,由于现代Web开发倾向于使用更安全和灵活的技术,如JavaScript框架...
首先,让我们深入理解Java Applet。Applet是一种小型Java程序,可以在支持Java的Web浏览器中运行。它们由Java编译器编译成字节码,然后通过Java插件在用户的计算机上解释执行。然而,由于安全和性能问题,现代浏览器...
Java APPLET是Java技术在Web...要深入理解这个项目,你需要解压文件并查看源代码,了解具体的实现细节。如果你对Java编程和图形界面设计感兴趣,这是一个很好的学习实例,可以从中学习到如何用Java实现一个简单的游戏。
深入学习和分析这个项目,你可以了解到如何在Java中创建交互式图形应用,以及如何利用Applet技术将这样的应用嵌入到Web环境中。这对于理解Java图形编程和Web开发有极大的帮助。同时,对于初学者来说,Drawlet Applet...