jnlp 项目示例

  • jnlp项目示例
    • 1-创建一个可执行jar
    • 2-为jar添加签名
    • 3-编写 jnlp 文件
    • 4-发布前三步的文件到服务器
    • 5-测试执行
  • 问题
    • 浏览器输入Url只下载不执行 & 双击.jnlp 文件不执行

简介

JNLP(Java Network Launch Protocol)是一种用来在网络中部署应用程序的一种协议;

在客户端只需要安装 java web start 就可以使用服务器端的软件,它具有自动更新应用程序版本的功能;

通过 java web start 加载.jnlp文件, 从中获取可执行jar包的下载地址,执行方法,以及参数等信息, 然后去下载jar包后执行应用程序.

优点: 如果你的java应用程序以jnlp 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优了
Jnlp还是一种基于xml的启动java程序的技术。在100town.com您可以将生成的代码存成一个后缀为**.jnlp的文件,将这个文件发布在自己的网站上,当用户访问这个网站时,就可以启动java程序。

jnlp项目示例

1. 创建一个可执行jar

随便创建一个里面有main()方法的jar就行了, 为了演示完整点, 来个简单的frame demo

package cn.cpf;

import javax.swing.*;
import java.awt.*;

/**
* @author by CPF
*/
public class MainFrame extends JFrame {
   private static final long serialVersionUID = -4791222140191948495L;

   /**
   * Launch the application.
   */
   public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            try {
               MainFrame frame = new MainFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }

   /**
   * Create the frame.
   */
   public MainFrame() {
      setBounds(100, 100, 325, 203);

      final JPanel contentPane = new JPanel();
      contentPane.setLayout(null);
      setContentPane(contentPane);

      final JTextField textField = new JTextField();
      textField.setBounds(10, 20, 200, 30);
      contentPane.add(textField);
      textField.setColumns(50);
      textField.setText("简单的frame, 非常简单了");
   }
}
swing-demo-structure.png

最终项目结构是这样的, 然后达成 swing-demo.jar 包, 能不能点击执行无所谓的.

2. 为jar添加签名

没有签名实际上也是可以运行的, 只不过在运行的时候会弹出一些警告, 而且在调用本地资源时可能会出现问题

cmd-storekey.png
  1. 创建 keystore, 命名为 swing-demo-keys, alias 为 jdc

    keytool -genkey -keystore swing-demo-keys -alias jdc

    运行之后输入两次密码, 后面的名字, 组织之类的输入不输入无所谓了.

  2. 将创建的 keystore 添加到 swing-demo.jar

    jarsigner -keystore swing-demo-keys swing-demo.jar jdc

3. 编写 jnlp 文件

具体的配置属性请看下面的文件示例, 里面的注释解释的很详细

编写 jnlp 文件命名为 swing-demo.jnlp

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

<!--codebase 属性指出搜索应用程序资源的顶级URL,下面的icon/jar元素都是以这个URL为基本, 当然你也可以使用完整的url路径.-->
<!--codebase 据说直接填本地文件夹路径都可以, 具体我也没有试过, 有兴趣的话可以尝试下.-->
<jnlp codebase="http://127.0.0.1:8080/jnlptest" href="./swing-demo.jnlp">
    <!--    blog.bitsCN.com网管博客等你来搏-->
    <information>
        <!-- 在"开始"-"运行"菜单中输入"javaws"或"javaws -viewer"启动Web Start,会看到客户端已经安装的webstart应用程序-->
        <!--title :应用程序标题 vendor:供应商, title/vendor 元素必须,会显示在用"javaws -viewer"命令, 打开的应用程序缓存查看器(Java Application Cache Viewer)中-->
        <title>HelloWorld</title>
        <vendor>哈哈哈哈</vendor>
        <description>demo</description>

        <!-- homepage :存放有关应用程序的相关文档的URL,如help文件等,仅仅是description作用
        <homepage href="http://127.0.0.1:8080/jnlptest/index.html"/> -->

        <!--icon 指定图标会显示在应用程序缓存查看器中,在查看器中新建webstart快捷方式到桌面时也会显示为快捷方式图标,只支持GIF/JPEG格式,其它格式无效-->
        <icon href="./img/logo.jpg"/>

        <!--splash 在sun的文档中提到会出现在webstart启动时的闪屏中,如果网络慢, 或启动慢, 可以设置一下了-->
        <icon kind="splash" href="./logo.jpg"/>

        <!-- 允许离线启动,可以使用javaws -offline命令-->
        <offline-allowed/>
    </information>

    <resources>
        <!-- 最好1.5以上, 下面我指定的是1.8, 因为我觉得1.8以前的版本都过时了, 哈哈 -->
        <j2se version="1.8+"/>
        <!-- 指定要下载到本地的jar文件(注意,所有的文件都需要打包才能够下载),可以包含一些资源文件,如icons/configuration files,可以使用getResource方法取得-->
        <jar href="./swing-demo.jar"/>
    </resources>

    <!--application-desc 必须,指定webstart启动时执行jar文件中的哪个类-->
    <application-desc main-class="cn.cpf.MainFrame"/>

</jnlp>

4. 发布前三步的文件到服务器

再此使用tomcat(其他serve-app也可以), 在tomcat的webapp目录下新建 jnlptest 文件夹, 将swing-demo.jnlp, swing-demo.jar, swing-demo-key 等全部拷贝进去. 如果在.jnlp文件中配置logo, 或者其它jar包的话也全部放进去. 启动tomcat, 反正只要通过url路径能访问到就行.

file-structure.png

5. 测试执行

浏览器输入http://127.0.0.1:8080/jnlptest/swing-demo.jnlp, 回车,

或者命令行输入 javaws http://127.0.0.1:8080/jnlptest/swing-demo.jnlp


注意此时可能会弹出安全, 权限什么的, 如果这是个值得信任的.jnlp文件的话就去java控制面板里面去配置信息, 详情见下图配置吧.

jnlp-javaws-config.png

即便配置完成之后也会有下面的警告

jnlp-warning.png

还有就是如果url对应的jar没有签名的话, 也会弹出各种弹框啦, 至于信不信任自己视情况而定.

最后画面就显示出来了

mainframe-demo.png

问题

浏览器输入Url只下载不执行 & 双击.jnlp 文件不执行

首先先说明一个大众都误解的一个错误, 浏览器是不能打开jnlp文件的, 真正打开jnlp的是javaws(java web start), 完整的步骤是浏览器发现自己不能处理jnlp文件, 于是将jnlp抛给系统去处理, 系统自己也不能处理, 最后由系统去调用javaws执行jnlp文件. 详细步骤如下

直接在命令行输入 javaws http://127.0.0.1:8080/jnlptest/swing-demo.jnlp 是最直接的处理方式.

  1. 浏览器通过url访问的一般是一个 .jnlp 文件, 浏览器获得文件之后发现自己不能处理 .jnlp 文件, 之后不同的浏览器会有不同的处理方式.

    • ie: 默认直接交给系统去运行.
    • chrome: 默认直接下载.
    • Mocrosoft Egde: 弹出一个选项(运行, 下载, 取消), 运行就是交给系统去运行.
  2. 系统获得 .jnlp 文件之后会交给java web start运行.

    如果系统无法识别.jnlp文件打开方式的话, 可以通过配置.jnlp文件默认打开程序来解决.(一般来说只要是通过window安装包正确安装jre的话, 都会自动配置.jnlp文件运行方式的.)

  3. java web start 加载.jnlp文件, 从中获取可执行jar包的下载地址,执行方法,以及参数等信息, 然后去下载jar包后执行应用程序.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容