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>
还有一个可选的<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"?>

<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>
我们下面将它部署到tomcat下,首先你需要在%CATALINA_HOME%l中添加一个mime-mapping:
<mime-mapping>
      <extension>jnlp</extension>
       <mime-type>application/x-java-jnlp-file</mime-type>
  </mime-mapping>
然后在%CATALINA_HOME%\webapps下建个jnlp的文件夹,把HelloJNLP.jnlpHelloJNLP.jar文件copy过去,然后在里面建个WEB-INF目录;
然后你就可以通过localhost:8080/jnlp/HelloJNLP.jnlp来运行程序了
 
文件打包可以通过jdk中的jar,假如要将当前目录下所以文件打包到HelloJNLP.jar中,你可以在dos下输入:
jar -cvf HelloJNLP.jar *.class
 
你还可以通过keytooljarsigner来为你的jar文件签名
创建签字
keytool -genkey -keystore myKeys -alias jdc
jar文件签字
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需要如下几步:
一、为test.jar文件签名
    从网络上下载就意味着风险大大增加,因此,要想通过jnlp从网络上下载jar文件,并运行,就需要对该文件进行签名。如果不签名,java程序将运行在 sandbox中,也就是说无法
访问本地资源,由于test.jarswt程序,需要访问本地的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.keystoretest.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文件,并输入如下内容:
<?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>
        <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>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。