在進行 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文件下載到本機,在本機上獨立運行。