JNLP使用
JNLP是 Java Network Launch Protocol的简写,是一种用来在网络中部署应用程序的一种协议;在客户端只需要安装 java web start就可以使用服务器端的软件,它具有自动更新应用程序版本的功能;其实要部署一个jnlp程序也是很简单的,下面我们就来部署 一个简单的程序;要在服务器部署应用程序,一个最主要的就是编写一个部署文件,它是一种xmljava创建文件格式的文件,以jnlp为后缀;而你的应用程序就必须打包成 jar文件格式;假设你你现在有一个HelloJNLP.jar的文件,我们下面就来编写它的部署文件;
新建文件HelloJNLP.jnlp文件,然后使用你喜欢的文件编辑器打开该文件,下面开始来编写该文件
首先在文件中写如xml的版本和使用的编码,这行是可选的,不过在实际部署中最好还是写上这行;如下:
<?xml version="1.0" encoding="UTF-8"?>
然后以<jnlp>标记开始,在这里你要把你应用程序的地址写好,这个地址可以以本地文件目录,
也可以是一个网络url,如下
<jnlp spec="1.0+" codebase="192.9.200.156:8080/jnlp" href="192.9.200.156:8080/jnlp/Hello.jnlp">
<!-- codebase 也可以是file:///形式 -->
在<information>中你可以写入在应用程序下载是显示的一些资料,如标题,描述,图标,程序的存放目录等
<information>
<title>Hello</title>
<vendor>HelloJNLP</vendor>
<homepage href=""/>
<icon href="HelloJNLP.jpg"/>
</information>
<title>Hello</title>
<vendor>HelloJNLP</vendor>
<homepage href=""/>
<icon href="HelloJNLP.jpg"/>
</information>
还有一个可选的<offline-allowed/>标记,它允许application在断网的情况下也能运行;
在<security>中你可以配置程序运行时的安全咨询,它可以是
<j2ee-application-client-permissions/>
<all-permissions/>
<all-permissions/>
这个标记也可以不写;
然后在<resources>中你可以配置jre的版本,程序相对codebase的路径
<resources>
<j2se version="1.5+"/>
<jar href="HelloJNLP.jar"/>
</resources>
<j2se version="1.5+"/>
<jar href="HelloJNLP.jar"/>
</resources>
假如你在打包jar文件的时候没有指定主类,那么你必须使用以下方法指定一个主类
<application-desc main-class="HelloJNLP"/>
一个完整的jnlp文件是:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+"
codebase="192.9.200.156:8080/jnlp"
href="192.9.200.156:8080/jnlp/Hello.jnlp">
<information>
<title>Hello</title>
<vendor>Tech Tips Sample</vendor>
<homepage href=""/>
<icon href="HelloJNLP.jpg"/>
</information>
<!--
<offline-allowed/>
<security>
<jnlp spec="1.0+"
codebase="192.9.200.156:8080/jnlp"
href="192.9.200.156:8080/jnlp/Hello.jnlp">
<information>
<title>Hello</title>
<vendor>Tech Tips Sample</vendor>
<homepage href=""/>
<icon href="HelloJNLP.jpg"/>
</information>
<!--
<offline-allowed/>
<security>
<j2ee-application-client-permissions/>
</security>
-->
<resources>
<j2se version="1.5+"/>
<jar href="HelloJNLP.jar"/>
</resources>
<application-desc main-class="HelloJNLP"/>
</jnlp>
</security>
-->
<resources>
<j2se version="1.5+"/>
<jar href="HelloJNLP.jar"/>
</resources>
<application-desc main-class="HelloJNLP"/>
</jnlp>
我们下面将它部署到tomcat下,首先你需要在%CATALINA_HOME%l中添加一个mime-mapping:
<mime-mapping>
<extension>jnlp</extension>
<mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>
<extension>jnlp</extension>
<mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>
然后在%CATALINA_HOME%\webapps下建个jnlp的文件夹,把HelloJNLP.jnlp和HelloJNLP.jar文件copy过去,然后在里面建个WEB-INF目录;
然后你就可以通过localhost:8080/jnlp/HelloJNLP.jnlp来运行程序了
文件打包可以通过jdk中的jar,假如要将当前目录下所以文件打包到HelloJNLP.jar中,你可以在dos下输入:
jar -cvf HelloJNLP.jar *.class
你还可以通过keytool、jarsigner来为你的jar文件签名
创建签字
keytool -genkey -keystore myKeys -alias jdc
keytool -genkey -keystore myKeys -alias jdc
为jar文件签字
jarsigner -keystore myKeys jarName.jar jdc
jarsigner -keystore myKeys jarName.jar jdc
使用脚本文件(jnlp)来发布Java程序
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。androidguy.blog.51cto/974126/214447
发 布Java程序(桌面程序)最直接的方法就是将jar文件打包交给用户。不过有时jar文件很多,也很大。为了方便,sun提供了另外一种方式来通过网络 发布Java程序。这就是jnlp文件。可能很多读者曾经下载过很多jnlp文件,运行后会自动从指定的网站下载相应的文件。
实际上,jnlp文件就是一个xml格式的脚本文件。假设我们有一个test.jar文件需要安装(该文件是一个基于SWT的桌面程序),那么要使用jnlp文件发布test.jar需要如下几步:
实际上,jnlp文件就是一个xml格式的脚本文件。假设我们有一个test.jar文件需要安装(该文件是一个基于SWT的桌面程序),那么要使用jnlp文件发布test.jar需要如下几步:
一、为test.jar文件签名
从网络上下载就意味着风险大大增加,因此,要想通过jnlp从网络上下载jar文件,并运行,就需要对该文件进行签名。如果不签名,java程序将运行在 sandbox中,也就是说无法
从网络上下载就意味着风险大大增加,因此,要想通过jnlp从网络上下载jar文件,并运行,就需要对该文件进行签名。如果不签名,java程序将运行在 sandbox中,也就是说无法
访问本地资源,由于test.jar是swt程序,需要访问本地的dll(windows)或.so(linux)库,所 以必须要对test.jar进行文件签名。
签名需要一个证书,如果没有证书,可以使用如下的命令生成一个证书
签名需要一个证书,如果没有证书,可以使用如下的命令生成一个证书
keytool -genkey -alias nokiaguy -validity 12345 -keypass nokiaguypass -storepass nokiaguypass
-keystore nokiaguy.keystore -dname "CN=nokiaguy, OU=nokiaguy, O=D, L=CA, S=CA, C=CN"
-keystore nokiaguy.keystore -dname "CN=nokiaguy, OU=nokiaguy, O=D, L=CA, S=CA, C=CN"
在执行上面的命令后,会在当前目录下生成一个nokiaguy.keystore文件。然后将test.jar复制到当前目录下。现在当前目录有两个文件:nokiaguy.keystore和test.jar。最后使用如下的命令对test.jar签名:
jarsigner -keystore nokiaguy.keystore -storepass nokiaguypass -keypass nokiaguypass test.jar nokiaguy
在执行完上面的命令后,我们会发现test.jar文件的尺寸变大了。
二、建立虚拟目录
下面就是在自己的机器上或服务器建立一个可访问的虚拟目录。本文使用了IIS建立一个虚拟目录,可通过200.200.200.200/key访问该目录,在该目录下只有一个test.jar文件(经过签名后的jar文件)。
三、编写jnlp文件
在任意目录下建立一个test.jnlp文件,并输入如下内容:
在任意目录下建立一个test.jnlp文件,并输入如下内容:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="200.200.200.200/key">
<information>
<title>CustomSWT</title>
<vendor>nokiaguy.blogjava</vendor
<homepage href="index.html"/>
</information>
<security>
<jnlp spec="1.0+" codebase="200.200.200.200/key">
<information>
<title>CustomSWT</title>
<vendor>nokiaguy.blogjava</vendor
<homepage href="index.html"/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6.0"/>
<jar href="test.jar"/>
</resources>
<application-desc main-class="CustomMain"/>
</jnlp>
</security>
<resources>
<j2se version="1.6.0"/>
<jar href="test.jar"/>
</resources>
<application-desc main-class="CustomMain"/>
</jnlp>
其中<jnlp>根元素通过codebase指定了虚拟目录的url。通过<jar>元素指定了要下载的test.jar文件。 如果存在多个jar文件,可以有多个<jar>元素。<jar>元素的href属性指定要下载的jar文件,该文件路径是相对于 codebase属性值的。如果要考虑不同的操作系统,可以将多个<resources>元素,如下面的代码所示:
<resources os="Windows">
<jar href="win32/swt.jar"/>
<jar href="win32/swt.jar"/>
<nativelib href="win32/swt-native-lib-win32.jar"/>
</resources>
<resources os="Linux">
<jar href="linux/swt.jar"/>
<jar href="linux/swt-pi.jar"/>
<nativelib href="linux/swt-native-lib-linux.jar"/>
</resources>
</resources>
<resources os="Linux">
<jar href="linux/swt.jar"/>
<jar href="linux/swt-pi.jar"/>
<nativelib href="linux/swt-native-lib-linux.jar"/>
</resources>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论