jnlp简单使用

JNLP是 Java Network Launch Protocol的简写,是一种用来在网络中部署应用程序的一种协议;在客户端只需要安装 java web start就可以使用服务器端的软件,它具有自动更新应用程序版本的功能;其实要部署一个jnlp程序也是很简单的,下面我们就来部署 一个简单的程序;要在服务器部署应用程序,一个最主要的就是编写一个部署文件,它是一种xml格式的文件,以jnlp为后缀;而你的应用程序就必须打包成 jar文件格式;假设你你现在有一个HelloJNLP.jar的文件,我们下面就来编写它的部署文件;

新建文件HelloJNLP.jnlp文件,然后使用你喜欢的文件编辑器打开该文件,下面开始来编写该文件

首先在文件中写如xml的版本和使用的编码,这行是可选的,不过在实际部署中最好还是写上这行;如下:

<?xml version="1.0" encoding="UTF-8"?>

然后以<jnlp>标记开始,在这里你要把你应用程序的地址写好,这个地址可以以本地文件目录,也可以是一个网络url,如下

<jnlp spec="1.0+" codebase="http://192.9.200.156:8080/jnlp" href="http://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>

还有一个可选的<offline-allowed/>标记,它允许application在断网的情况下也能运行;

在<security>中你可以配置程序运行时的安全咨询,它可以是

<j2ee-application-client-permissions/>
<all-permissions/> 

这个标记也可以不写;

然后在<resources>中你可以配置jre的版本,程序相对codebase的路径

<resources>
    <j2se version="1.5+"/>
    <jar href="HelloJNLP.jar"/>
  </resources>

 

假如你在打包jar文件的时候没有指定主类,那么你必须使用以下方法指定一个主类

<application-desc main-class="HelloJNLP"/>

一个完整的jnlp文件是:

<?xml version="1.0" encoding="UTF-8"?>
<!-- file Hello.jnlp -->
<jnlp spec="1.0+"
codebase="
http://192.9.200.156:8080/jnlp"
href="
http://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>

我们下面将它部署到tomcat下,首先你需要在%CATALINA_HOME%conf/web.xml中添加一个mime-mapping:

<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目录;

然后你就可以通过http://localhost:8080/jnlp/HelloJNLP.jnlp来运行程序了

 

文件打包可以通过jdk中的jar,假如要将当前目录下所以文件打包到HelloJNLP.jar中,你可以在dos下输入:

jar -cvf HelloJNLP.jar *.class

 

你还可以通过keytool、jarsigner来为你的jar文件签名

创建签字
keytool -genkey -keystore myKeys -alias jdc

为jar文件签字
jarsigner -keystore myKeys jarName.jar jdc

 

 

使用脚本文件(jnlp)来发布Java程序


版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://androidguy.blog.51cto.com/974126/214447

 发 布Java程序(桌面程序)最直接的方法就是将jar文件打包交给用户。不过有时jar文件很多,也很大。为了方便,sun提供了另外一种方式来通过网络 发布Java程序。这就是jnlp文件。可能很多读者曾经下载过很多jnlp文件,运行后会自动从指定的网站下载相应的文件。
    实际上,jnlp文件就是一个xml格式的脚本文件。假设我们有一个test.jar文件需要安装(该文件是一个基于SWT的桌面程序),那么要使用jnlp文件发布test.jar需要如下几步:

一、为test.jar文件签名
    从网络上下载就意味着风险大大增加,因此,要想通过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"

    在执行上面的命令后,会在当前目录下生成一个nokiaguy.keystore文件。然后将test.jar复制到当前目录下。现在当前目录有两个文件:nokiaguy.keystore和test.jar。最后使用如下的命令对test.jar签名:

jarsigner -keystore nokiaguy.keystore -storepass nokiaguypass -keypass nokiaguypass test.jar nokiaguy

    在执行完上面的命令后,我们会发现test.jar文件的尺寸变大了。

二、建立虚拟目录

    下面就是在自己的机器上或服务器建立一个可访问的虚拟目录。本文使用了IIS建立一个虚拟目录,可通过http://200.200.200.200/key访问该目录,在该目录下只有一个test.jar文件(经过签名后的jar文件)。

三、编写jnlp文件
    在任意目录下建立一个test.jnlp文件,并输入如下内容:

<?xml version="1.0" encoding="utf-8"?>
<jnlp  spec="1.0+" codebase="http://200.200.200.200/key">
   
<information>
       
<title>CustomSWT</title>
       
<vendor>nokiaguy.blogjava.net</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>

    其中<jnlp>根元素通过codebase指定了虚拟目录的url。通过<jar>元素指定了要下载的test.jar文件。 如果存在多个jar文件,可以有多个<jar>元素。<jar>元素的href属性指定要下载的jar文件,该文件路径是相对于 codebase属性值的。如果要考虑不同的操作系统,可以将多个<resources>元素,如下面的代码所示:

    <resources os="Windows">
        
<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>

    要注意,必须使课堂<application-desc>元素指定要运行的主窗口的类名(带包名),由于本文使用的test.jar文件中主窗口类没有名,类名为CustomMain,因此,只main-class属性值为CustomMain。

    运行test.jnlp,一开始会显示如图1所示的欢迎界面。

图1

    然后会出现如图2所示的界面。

图2

    不过读者不要担心,这不是错误,而是说我们使用的证书并不是Sun支持的(而是我们自己生成的),因此,会出现这个证书提示(如果使用Sun支持的证书就不会出现这个异常,但要花钱的哦!)。选中“始终信任此发行者的内容”复选框,单击“运行”按钮,就会下载test.jar文件,并运行程序。再次运行 test.jnlp文件,就会直接运行程序了(不会再出现图2的对话框)。
    如果这时服务端更新的test.jar,test.jnlp会自动检测程序文件的更新时间,如果服务端程序更新,则会重新下载该程序,并运行。因此,使用 jnlp文件也可以实现实时更新程序的功能。有些象微软的smartclient。在更新服务端程序时,千万别忘了对程序进行签名啊,如果不签名,在运行 jnlp文件时就会出现如图3所示的异常信息。

图3

    实际上,jnlp文件默认情况下将test.jar文件下载到C:\Documents and Settings\Administrator\Application Data\Sun\Java\Deployment\cache目录中。但文件名并不是test.jar,读者可以在该目录中查找所有的文件,并找与 test.jar文件的大小一样的文件即可(一共也没多少文件,很好找)。如文件名为27a940d-69feaa17。如果服务端和客户端cache中 的程序一样新或没有客户端的新,则jnlp会直接运行客户端cache中的程序。
    最后提一下,jnlp也是需要使用jre的哦,在使用jnlp之前,别忘了安装jre啊!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值