把jnlp文件以applet的方式嵌入到网页中运行


在进行 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文件下载到本机,在本机上独立运行。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM