Java Web Start 与jnlp结合实例讲解
JNLP简单应用
JNLP,全称为Java Network Launch Protocol,以为Java网络加载协议。JNLP是Java WebStart的一个组成协议,而Java WebStart是一种简化Java 应用程序部署的技术,根据jnlp的配置文件,自动去网络上加载应用程序,并运行在Java WebStart上(在JDK1.4以后都包含了Java WebStart)。
通过JNLP发布程序,可以大致分为以下几布:
一:开发你想要发布的应用程序。
二:把开发的应用程序以及所有用的资源打包成一个或几个jar包。
三:如果你的应用程序应用到了机器上的本地资源,则需要为所有的jar包签名,否则可以直接发布。
四:编写jnlp文件。
下面我通过我做的联系简单一下整个流程:
对项目中的类打jar包:
webstart->Export->Runnable JAR file->选择存放位置和jar名(如:d:/HelloWorld.jar)和运行的main方法所在的类->finish
签名按以下操作进行:
1,开始-——运行——cmd,进入打好的jar包的目录,运行下面这句话:
keytool -genkey -keystore myKeystore -alias tankApp
(其中-alias是为起别名),这时会提示你属于一些信息,可以只输入密码,其他的直接回车略过,密码一定要记住,
2,如果你想察看一下刚才生成的myKeystore文件的内容,可以使用下面这句话: keytool -list -keystore myKeystore
,
你会看到下面的内容:
3,对你需发布应用程序的jar包进行签名,运行下面这句话: jarsigner -keystore myKeystore tank.jar tankApp
,这是会提示你输入密码,就是刚才要记住的密码。
好了,现在可以继续进行了。打开你的MyEclipse,新建一个Web Project,名为jnlpTest,在WebRoot下建一个文件夹名为app,在app下新建lib目录,把签过名的jar包放在这里。在app目录下新建一个jnlp文件(可以建一个txt,然后把后缀名改为.jnlp),其实,jnlp就是一个xml文件,里面的配置信息才是最重要的。你可以不用自己写,去官方找一个写好的jnlp,然后拿下来修改它。我的jnlp文件如下:
<?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for SwingSet2 Demo Application --> <jnlp spec="1.0+" codebase="http://localhost:8080/jnlpTest/apps" href=" jnlpTest.jnlp"> <information> <title> JNLP Test <vendor>WBF</vendor> <homepage href=" jnlpTest.html"/> <description> JNLP Test </description> <icon href="images/ jnlpTest.jpg"/> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.6"/> <jar href="lib/tank.jar"/> </resources> <application-desc main-class="TankClient"/> </jnlp> |
下面对里面的配置做一下简单的解:
spec:jnlp 文件运行的最低版本为1.0,这里用1.0+,当然还有1.5,6.0。
codebase:是href属性中的jnlp文件所在的位置
href:这里要用jnlp文件的全名。
<information>属性里面时候一些对资源文件的简单描述。
<title>:发布的程序的标题。
<vendor>:发行人的信息,可以把自己的名字写上。
<homepage>:存放有关应用程序的相关文档的URL,可以不写。
<description>:对应用程序的简短描述,可以有多对,可以不写。
<icon>:下载后用来作为表示的图像。
<offline-allowed>:指明可以离线运行应用程序,不需要修改。
<security>:如果没有指明<security>,默认是不允许应用程序访问用户的本地资源,如果设定为<all-permissions/>,则表示允许应用程序访问用户的本地资源,一般都会设定此值。
<resource>:<j2se version = 指定jdk版本>
<jar href = 指定需发布的应用程序的jar包存放的位置>
<application-desc> :main-class:应用程序运行启动的主类
<argument>:应用程序运行时的参数,可以有多个,每一个参数用一对<argument>参数</argument>。
现在,最核心的东西陪完了,可以写一个index.jsp页面了:
<%@page contentType="text/html;charset=gb2312"%> <html> <title>JNLP Test</title> <head> <SCRIPT LANGUAGE="Javascript"> function insertLink(url, name) { document.write("<a href=" + url + ">" + name + "</a><br><br>"); } insertLink("http://localhost:8080/jnlpTest/apps/jnlpTest.jnlp"," jnlpTest "); </SCRIPT> </head> <body> </body> </html> |
这时,所有的东西基本都准备好了,可以启动tomcat服务器,在浏览器中输入: http://localhost:8080/jnlpTest/index.jsp,不出意外会看到:jnlpTest 字样,点击它就会找到app下的jnlpTest.jnlp文件,自动下载文件,下载完毕后会在Java WebStart上运行了。当然你可以直接到app下运行jnlpTest.jnlp,选择用Java(TM) Web Start Laucher。
JNLP的应用非常广泛,比如把对applet的应用,可以使人机交互的过程更为丰富多样,我现在正在做的这样一个工作。对于JNLP,我在今天下午才成功的写出了这个小例子,对JNLP的了解还只是皮毛,我觉得这项技术应该得到更为广泛的应用,这使得程序员可以不擅长做页面的样式,直接通过程序写出要与客户进行交互的applet,然后嵌入到页面中去。
在学习JNLP的过程中,会经常看到这样一个名词RIA,即:Rich Internet Application,译为丰富性网络应用服务,是一种具有近似于传统桌面应用软件系统功能和特性的网络应用系统。RIA系统最大的特点是将大部分处理任务都从用户界端移植到客户端,仅保留一些必要数据与服务器端进行信息交互。越深入的学习越觉得这里边真的是丰富多彩,很有意思。