- 浏览: 169711 次
- 性别:
- 来自: 北京
最新评论
-
guoshuang60:
关于线程池,能不能给个使用的例子啊>我们有一个线程池,但 ...
Java线程池,正式上线运行的源码,分享欢迎使用并提意见 -
jiajunde:
哥们们,用了评价一下社。。。有啥问题没
Java线程池,正式上线运行的源码,分享欢迎使用并提意见 -
caoxiaoj2ee:
好像不支持FF
图片另存为
下一代Java Applet插件技术
Java SE 6对Java桌面应用进行较大的升级,并启动了Java SE 6 Update N计划,该计划旨在简化JRE的大小,增进用户的安装体验,并提供了一个新的Applet浏览器插件,该插件将会随Java SE 6 Update 10发布。本文全面介绍了这个新插件的关键特性,并以NASA的World Wind为例介绍了该插件的应用。(2008.07.15最后更新)
Applet回来了!
为了在网络中传递你的程序,是时候再次考虑Java Applet技术了。下一代Java插件技术以一种不同的,比过去更高效、更可靠的途径来运行Applet。现在你可以获得如下好处:
增强的可靠性
改进的用户体验
在后台启动Applet
内建的JNLP支持
针对每个Applet的命令行参数
堆内存大小,Java 2D API加速选项
改进的Java/JavaScript程序设计语言集成
改进的Windows Vista支持
签名的Applet现在可以在Internet Explorer的保护模式中正常运行
下一代Java插件提供了一种完全重新设计的架构,它将出现在Java SE 6 Update 10中。该插件为运行在网络浏览器中的Applet提供了强大的新功能,它以向后兼容的方式改进了整个Applet的可靠性及功能。
下一代Java插件最有意义的新特性是它内建支持通过JNLP文件启动Applet。使用JNLP文件格式作为Applet的描述符就能允许Applet马上复用之前为Java Web Start应用所写的JNLP扩展。
执行Applet的新途径
执行Applet的新途径在结构上与Java Web Start技术相似,但与浏览器整合的更为紧密。 Applet不在运行于网络浏览器内的JVM中,而是会启动一个独立的JVM进程去运行Applet。默认地,只有一个JVM将被启动,但你也能启动多个JVM,并且可以为每个Applet都设置命令行参数,所以你能影响堆内存的大小或其它的要求。
Figure 1. Applet Architecture
在上图中,云表示JVM实例。在浏览器内有一个小的,headless JVM被用于管理一个或多个客户端JVM之间的连接,这些JVM运行着Applet。在该图中,Duke表示Applet。其中,一个JVM实例运行着两个Applet,另一个运行着一个Applet。
Applet直接从JNLP文件启动,它使用的JNLP文件与Java Web Start软件使用的描述符文件相同,并且允许使用比典型的"archive","code"和"cache_archive"更为强大的参数。
新的插件提供了:
能够访问之前仅由Java Web Start软件专用的高级JNLP扩展。之前有少部分参数能够使用,但有一些限制,现在这些限制则被去除。
通过Applet访问JNLP API。
支持PersistenceService和DownloadService。
能够控制堆内存大小,命令行参数,JRE版本选择和自动下载。你具有Java Web Start软件所拥有的相同功能。
现在你就可以在Web页面中使用像下面这样的语句了:
<applet width=”500” height=”500”> <param name=”jnlp_href” value=”my_applet.jnlp”> </applet>
调用Applet生命周期方法init,start,stop和destroy会更为确定,并且已经改进了跨浏览器行为。完全支持Applet类装载器缓存,遗留的Applet生命周期及对向后兼容性的需求,并且这些行为都已得到了改进。
Applet运行的就像一个由Java Web Start启动的应用。参数jnlp_href在Web页面和Applet的JNLP描述之间起到了桥接的作用。在如宽度与高度这样的特定方面,Applet标签与JNLP文件具有重叠的机制。
一般地,你应该使用Deployment Toolkit,这也是一个出现在Java SE 6 Update 10中的新工具,它能自动地为Applet标签生成HTML。部署建议指南展示了如何使用Deployment Toolkit简便地发布Applet。
配置Applet
现在也能更为简单地在多个方面来配置Applet,包括堆内存大小,需要被使用的Java版本,类加载器缓存,边界,及其它。
<applet>与JNLP文件在针对某些参数时有重叠的机制。这些冲突可以用如下方法解决:
width and height:这些属性将总是从<applet>,而不是JNLP文件,中获取。这是假设浏览器知道Applet在Web页面上应该显示多大,也只有浏览器才能支持相对于页面的宽度与高度(例如,width="50%")。
codebase:如果JNLP文件在<jnlp>标签中指定了一个绝对的codebase,那么就使用它。否则,将使用在codebase handling一节中描述的规则进行组织。
code:当指定了jnlp_href参数,Applet的主类名将从main-class参数换成JNLP文件中的applet-desc标签,并且code属性会被忽略。注意,该特性允许你为经典Java插件写一个拥有反馈的Applet标签,但在新的Java插件中,该标签可使用更高级的功能。请见下面的"兼容性"一节。
任何一个由<param>标签指定的Applet参数将与JNLP文件中指定的参数进行合并。如果<applet>标签和JNLP文件都指定了同一个参数,<applet>标签中的版本将覆盖JNLP文件中的版本,除了参数java_arguments和java_version。
新的java_arguments和java_version参数在JNLP Applet中是不必要的。会替换为通过JNLP文件请求JRE版本或向JVM传递参数的机制。所以,命令行参数和JNLP文件请求的JRE版本将会覆盖HTML中为Applet指定的这些值。
特定的参数,例如image,boxbgcolor等等,在Applet的启动过程中是有用的。在HTML而不是JNLP文件中指定这些参数可能更好些,以便于在加载Web页面时就可立即获取它们,而不用再等到单独下载JNLP文件之后。
过去,通过Java控制面板设置最大堆内存是有限制的。在新的Java插件中,这些限制被取消。现在Applet可以像命令行应用那样使用大量堆空间。
指定一个比默认值大的堆空间:
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-Xmx128m"> </APPLET>
指定一个非默认大小的堆内存以及一个Java 2D硬件加速器选项,该选项常通过JOGL使用OpenGL应用于Applet。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-Xmx256m -Dsun.java2d.noddraw=true"> </APPLET>
如果你喜欢,一个Applet可强制进入一个属于它自己的JVM实例,而与所有其它的Applet隔离开:
<param name=”separate_jvm” value=”true” />
当把某些桌面应用移植到Web浏览器时,这就有用了。
你也能使特定的Applet运行在特定版本的JRE上,如下所示:
<j2se version=”1.4+” > <j2se version=”1.5*” >
当想针对特定版本的JRE,或Applet取代早期版本的选择机制(如同IE浏览器中的CLSID),进行质量测评时,该方法就很有用了。如果请求了一个非常老的JRE版本,就会强制执行限制;如果Applet试图加载未签名的代码,将会提示用户。
注意,因为支持JNLP的Java插件是在Java SE 6 Update 10中才首次出现的,所以指定像“1.4+”这样的版本基本上没有意义的。当需要“1.7+”时,这才有意义。
另外,你可以在JNLP文件中使用<update>标签来显著降低第二次及接下来各次启动的时间。
<update check=”background”>
在这种情况下,将使用缓存中已有的Applet程序,并且在后台下载该应用的更新版本。在下次启动时,就会使用新版本。
新的插件也能更好地对图像进行定制,在Applet被加载之前会展示该图像。image参数会以支持动画GIF文件作为目标,Java Plug-in Developers' Guide的Special Attributes一节对此有描述。此外,现也支持如下新的参数:
boxborder
一个布尔型参数,用于指定在Applet被加载之前是否在Applet区域的边缘绘制一个宽度一象素的边框。默认为true。我们建议将该值设置为false,特别是将一个动画GIF用作加载期图像时,以避免可能的闪烁。
centerimage
一个布尔型参数,用于指定是否将加载期图像在Applet区域内居中显示,而不是从左上角起始。默认为false。
使用参数boxborder和centerimage的例子:
<APPLET archive="large_archive.jar" code="MyApplet" width="300" height="300"> <!-- Use an animated GIF as an indeterminate progress bar while the applet is loading --> <PARAM NAME="image" VALUE="animated_gif.gif"> <!-- Turn off the box border for better blending with the surrounding web page --> <PARAM NAME="boxborder" VALUE="false"> <!-- Center the image in the applet's area --> <PARAM NAME="centerimage" VALUE="true"> </APPLET>
现在可更容易维护向后兼容性。你可创建运行在更早Java插件版本上的程序,但仅需提供一个与jnlp_href参数一样的格式完整的<applet>标签就可使用这些新特性了。早期版本的JRE会忽略jnlp_href参数,转而使用<applet>标签。新的Java插件技术将忽略archive和code参数,而仅使用JNLP文件去启动Applet。
World Wind Applet示例
由World Wind Java开发组创建的NASA World Wind Java Applet示例阐述了如果发布像NASA World Wind Java这样的领先类库。同样地,也用示例说明了如何使用JavaScript在Web页面中高效地整合HTML和Applet内容。
<applet id="wwjApplet" width=600 height=380 code="gov.nasa.worldwind.examples.applet.WWJApplet" archive="BackwardCompatibility.jar"> <param name="jnlp_href" value="WWJApplet.jnlp"> </applet>
WWJApplet随标准的World Wind Java发行包发布。如下所述,你可选择编写你自己的Applet类并将World Wind嵌入其中:
下面是WWJApplet.jnlp文件中相关的部分:
<jnlp href="WWJApplet.jnlp"> <resources os="Windows"> <property name="sun.java2d.noddraw" value="true"/> </resources> <resources> <j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/> <jar href="worldwind.jar" main="true" /> <extension name="jogl" href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" /> </resources> <applet-descname="WWJ Applet" main-class="gov.nasa.worldwind.examples.applet.WWJApplet" <!-- Overwritten by the surrounding web page --> width="100" height="100"> </applet-desc> </jnlp>
注意几点:
在本例中,worldwind.jar作为主类使用。理想地,从NASA的网站引用它,将其作为一个JNLP扩展,这就使得许多不同的都嵌入了World Wind的应用程序或Applet共享相同的jar文件。详情请见下面的内容。
为了它的硬件加速的3D图形,World Wind Java使用了针对OpenGL API的Java绑定,JOGL。注意,JOGL JNLP扩展仅使用一行代码与应用程序进行结合。也要注意,在Windows平台上,由于OpenGL API与DirectDraw/Direct3D API(该API用于Windows平台默认的Java 2D实现)之间在驱动层面的冲突,需要指定系统参数-Dsun.java2d.noddraw=true。Windows平台上所有使用JOGL的应用程序与Applet程序都需要该系统参数。
Web页面中的HTML链接调用JavaScript函数,该函数会与Applet进行交互并将其导向合适的山峰。下面是这些链接中的一个:
<a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a> (southeast of Tacoma, Washington)
当点击该链接后,将会调用JavaScript函数gotoLocation。该函数定义在同一个Web页面中:
function gotoLocation(locationString) { var params = locationString.split(';'); if(params.length == 3) // Lat/lon getWWJApplet().gotoLatLon(parseFloat(params[1]), parseFloat(params[2])); }
Web页面HTML中的山峰位置将被解码为JavaScript字符串。将从这些字符串中解析出纬度,经度及其它视觉信息,并将它们传递给Applet。 gotoLatLon方法是在WWJApplet类中定义的;上面的方法调用将起动一个JavaScript-to-Java调用,把参数从JavaScript引擎传给Java。World Wind Applet接收该通知,并将视点以动画的方式切换到适当的地方。注意,gotoLatLon方法会迅速地返回,以便浏览器不必等待它的完成;该动画会在一个单独的Java线程中运行。
Figure 3. World Wind Applet with Mount St. Helen's Clicked
如上所述,将World Wind Java集成到你的应用程序或Applet程序中的最好方法是将其作为一个JNLP扩展。这允许很多来自网络的集成了World Wind Java的应用程序或Applet程序能够共享World Wind代码资源。为了引用World Wind JNLP扩展,你需将下面的语句行加入到你的应用程序或Applet程序的JNLP文件中的<resources>部分:
<extension name="worldwind" href="http://worldwind.arc.nasa.gov/java/0.4.1/webstart/worldwind.jnlp"/> <extension name="jogl" href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp"/> |
class MyWWJApplet extends WWJApplet {}
将World Wind作为一个扩展使用就意味着你不能将WWJApplet直接作为你的main-class使用。由于JNLP文件格式的语义,主jar (main="true")必须定义在主JNLP文件中。但很容易就能适应该限制,你可简单地创建你自己的WWJApplet子类(称之为MyWWJApplet),而它并不做任何事情:
将worldwind.jar置于classpath中,并编译上述类,然后将该类放入它自己的jar文件中。引入这个jar作为你的主jar,MyWWJApplet就成为了你的main-class,然后将其作为JNLP扩展引入到World Wind中。
结论
介绍了Java插件对JNLP的支持,这为Applet的发布提供了很多新的可能,这对在浏览器内外发布Java内容的方法的统一又进了一大步。Applet自从它们起始已过了很长的时间,现在随着对JNLP的支持,它们会比以往更快,也更易于定制。
发表评论
-
内存清理
2013-04-23 10:40 679操作系统32G内存,内存清理 echo 1 > ... -
在eclipse里加标签
2011-07-12 10:09 1184在eclipse里发现某处代码需要修改又不是马上改,一般需要加 ... -
在一台机器上挂多个tomcat
2011-06-24 15:25 1163在一台机器上挂多个TOMCAT,不能在profile里设置成全 ... -
Preference乱码
2011-06-22 15:48 12401. 菜单WindowèPreference..; ... -
JVM内存(转)
2011-06-19 22:29 1138JVM的内部结构 如图所 ... -
QPS、PV和需要部署机器数量计算公式(转)
2011-06-18 22:58 12470术语说明: QPS = req/sec ... -
设置TOMCAT内存大小
2011-06-14 09:42 1111Tomcat默认可以使用的内存很小,在较大型的应用项目中,这点 ... -
Java线程池,正式上线运行的源码,分享欢迎使用并提意见
2011-05-27 15:47 2164各位: 大家好,附件中三个文件分别是已经打成包的线程 ... -
peth0: received packet with own address as source address
2011-05-25 09:45 2067peth0: received packet with own ... -
Flex里组件居中
2011-04-26 21:21 932<!-- horizontalCenter= ... -
ibator生成java bean iBatls
2011-03-14 16:37 870以前用过,不记就忘了,看这个 详见:http://k ... -
CentOS5.5下挂载ntfs文件系统
2010-12-08 10:39 756CentOS5.5下挂载ntfs文件系统 ... -
打印对象里的内容
2010-10-09 13:43 810import java.util.*;import java. ... -
解决eclipse自动关闭
2010-09-09 15:53 752用java EE的IDE,把智能ABC干掉,就不会在输入法切换 ... -
myeclipse 没提示
2010-08-23 16:03 877建了个JAVA工程,然后发现输入代码后,在输入。后面不会弹出来 ... -
修改MyEclipse字体大小
2010-08-14 14:59 1449Window --> Preferences --> ... -
oracel建表空间,建用户,建权限
2010-06-12 11:31 1094用system用户登陆 -------创建表空间 需要修改 ... -
PPT不能播放
2010-06-08 08:40 1822装好机器以后PPT一直没有怎么用过,这几天发现我的PPT不能播 ... -
java生成静态页
2010-05-04 15:49 919java生成静态页 -
查看Linux版本号
2010-01-25 12:05 749cat /etc/issue 可以查到版本号能够出来SP2
相关推荐
Java Applet是一种基于Java技术的网页插件,允许网页开发者在网页中嵌入可执行的Java程序,提供丰富的交互体验。然而,由于Applet可能存在安全隐患,容易被恶意利用进行攻击,因此,Chrome和其他现代浏览器开始转向...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...
7. Java Applet和JavaFX:虽然不在当前的源代码标题中,但值得一提的是,Java曾有过Applet技术,用于在网页中嵌入Java程序,进行图形化展示。然而,由于安全性和现代Web标准的问题,Applet已逐渐被淘汰。JavaFX是...
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...