在进行 worldwind开发时,程序独立运行没有什么难度,但是要把applet版的worldwind嵌入到网页中,却整整搞了两天。但还好,总算是搞出来了。总结了之后,最重要的问题其实是:如何把jnlp嵌入到网页中。现总结如下:
一、以下内容参考的是java官网教程:
http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/embeddingJNLPFileInWebPage.html http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/createWebStartLaunchButtonFunction.html
看了上面这两个网页,弄明白了之后,就不必向下看了,我就是参考上面的教程做的。
二、 我的示例
1.请电脑上安装jdk7(不同操作系统安装不同版本,我在windows,linux下都试过了,没有问题)。如果要把jnlp文件下载到本地运行,那么jdk6就可以了,但是,如果要把jnlp嵌入到网
页中直接运行,则必须是jdk7 。jdk7中包含了java为浏览器准备的“java下一代插件” ,有了它jnlp才能嵌入到网页中运行。
2.新建文件夹,命名为:wwj。
3.确保要嵌入到网页中的.class或者jar包可以运行,例如,我打了一个jar包,名字为:appletTest.jar,双击运行或在终端中运行:java -jar appletTest.jar,没有问题,程序可以跑起
来。把appletTest.jar运行所需的库及资源文件,一起放入wwj文件夹。
4.编写jnlp文件,放入 wwj文件夹。确保jnlp文件没有问题,可以直接运行,例如,我为appletTest.jar写了一个jnlp文件,名字为:worldStreet.jnlp,双击运行或在终端中运行:javaws
worldStreet.jnlp,没有问题,程序可以跑起来,跟直接运行appletTest.jar的效果是一样的。
worldStreet.jnlp文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+"> <information> <title>world street map</title> <vendor>summer</vendor> <offline-allowed/> </information> <resources> <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="worldStreetMap.jar" main="true"/> <jar href="worldStreetMap_lib/worldwind.jar"/> <jar href="worldStreetMap_lib/jogl.jar"/> <jar href="worldStreetMap_lib/gdal.jar"/> <jar href="worldStreetMap_lib/gluegen-rt.jar"/> <jar href="worldStreetMap_lib/plugin.jar"/> </resources> <applet-desc name="world street applet" main-class="com.summer.applet.WWJAppletMinimal" width="800" height="600"> </applet-desc> <update check="background"/> </jnlp>
5.(1)把wwj文件夹放到某个可以运行的tomcat服务器上,例如我的tomcat服务器地址为:http://summer2:8080/hadoopWebGis4。修改上面的 jnlp文件成为服务器版的jnlp文件,
如下所示:
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://summer2:8080/hadoopWebGis4/wwj"> //修改的内容在这里:添加了codebase <information> <title>world street map</title> <vendor>summer</vendor> <offline-allowed/> </information> <resources> <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="worldStreetMap.jar" main="true"/> <jar href="worldStreetMap_lib/worldwind.jar"/> <jar href="worldStreetMap_lib/jogl.jar"/> <jar href="worldStreetMap_lib/gdal.jar"/> <jar href="worldStreetMap_lib/gluegen-rt.jar"/> <jar href="worldStreetMap_lib/plugin.jar"/> </resources> <applet-desc name="world street applet" main-class="com.summer.applet.WWJAppletMinimal" width="800" height="600"> </applet-desc> <update check="background"/> </jnlp>
(2)修改tomcat服务器的配置文件WEB-INF/web.xml,在web-app元素内插入子元素,内容为:
<mime-mapping> <extension>jnlp</extension> <mime-type>application/x-java-jnlp-file</mime-type> </mime-mapping>
(3)运行tomcat服务器,在浏览器中输入http://summer2:8080/hadoopWebGis4/wwj/worldStreet.jnlp,弹出下载框,下载该jnlp文件,双击运行或在终端运行:javaws
worldStreet.jnlp,运行没有问题的话,就说明服务器已经配置好了。
6.编写html文件,把jnlp文件嵌入到该html文件中。
(1)对jnlp文件中的内容进行base64编码,保存起来。编码可在http://www.base64encode.org/上面进行,只是在这个网页上输出的编码字符串后面加 上"Cg=="。例如:在网页
上编码输出的字符串为: PD94bWw.......gdmVyc2l , 则再加上 Cg== ,正确的结果应该为 PD94bWw.......gdmVyc2lCg== 。
(2)编写jsp文件,假设命名为worldStreet.jsp:
<html> <title>JWS Test</title> <head> </head> <body> <script src="deployJava.js"></script> //deployJava.js文件可在网上搜索下载得到,是java官方提供的一个工具包,在这里可用于运行applet的工具 <script> var attributes = {width:800,height:600}; var parameters = { jnlp_href : 'worldStreet.jnlp', jnlp_embedded :'base64编码的jnlp文件内容' }; deployJava.runApplet(attributes, parameters, '1.6'); //1.6.0是java版本号,可以根据需要进行修改
</script> worldStreet test!! </body> </html>
(3)把编写好的worldStreet.jsp放入tomcat服务器的wwj文件夹中,重启服务器,在浏览器中输入 http://summer2:8080/hadoopWebGis4/wwj/worldStreet.jsp,稍等一会儿,加载
的过程有点儿慢,就会在网页中看到结果,我在chrome和搜狗浏览器中试过,没有问题。
注意问题:
1. 客户端机器上一定要装上jdk7才可以运行网页上的 jnlp文件。服务器上有没有jdk7倒不重要。
2. 有时候运行结果出不来,或者结果不对,可以在客户端机器的终端输入:javaws -viewer,打开java的高速缓存查看器,清除之前运行过的程序,再次运行。
运行结果:
------------------------------------------------------------------------------------------------------------------------
题外话:
其实如果已经在客户端机器上安装了jdk7,即配置好了java应用程序运行所需的运行时环境,就不需要把jnlp文件嵌入到网页中了,完全可以直接下载jnlp文件在本机上运行。
嵌入网页方法2:与上面的方法基本相同,只是把worldStreet.jsp修改成如下:
<html> <title>JWS Test</title> <head> </head> <body> <script src="deployJava.js"></script><script> var url = "http://summer2:8080/hadoopWebGis4/wwj/worldStreet.jnlp"; deployJava.createWebStartLaunchButton(url, '1.6.0'); //1.6.0是java版本号,可以根据需要进行修改 </script> worldStreet test!! </body> </html>
运行结果:
点击上面的"Launch"按钮,就把jnlp文件下载到本机,在本机上独立运行。