Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

Java网络加载协议(JNLP)及Java Web Start

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  翻译:cherami

  mail:cherami@163.net

  原文:http://java.sun.com/jdc/JDCTechTips/2001/tt0530.html

  在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持

  对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。

  Java Network Launching Protocol (JNLP,java网络加载协议) 承诺改变这个现状。通过JCP(Java Community Process)的JSR-56的开发,

  JNLP解决了很多先前用java开发针对客户端的功能的问题。一个JNLP客户端是一个应用程序或者说服务,它可以从宿主于网络的资源中加载应用程序。如果你使用JNLP打包一个应用程序,那么一个JNLP客户端能够:

  • 为该应用探测,安装并且使用正确版本的JRE(java运行时环境)
  • 从浏览器或者桌面加载应用程序
  • 当新版本的应用出现时自动下载最新的版本。
  • 为了加速启动速度在本机缓存应用程序需要的类
  • 可以作为applet或者应用程序运行
  • 在必要的情况下下载原始的库
  • 以安全的方式使用诸如文件系统这样的本机资源
  • 自动定位和加载外部依赖资源

  Sun 提供了一个实现JNLP的称为Java Web Start(JWS)的参考实现。让我们使用它开发一个使用JFC Swing的简单应用。为了做这个,你需要从http://java.sun.com/products/javawebstart下载JWS。(译者注:JDK的新版本JDK1.4已经内置JWS,无须另外下载。)

  下面是应用程序的代码:


//File HelloJNLP.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HelloJNLP extends JFrame {
  public HelloJNLP() {
    super("Hello JNLP");
    String loadedFrom = this.getClass().getClassLoader().toString();
    JLabel jl = new JLabel("loaded by " + loadedFrom);
    JEditorPane jtp = new JEditorPane("text/plain", 
                                                  "Edit this text");
    getContentPane().add(jl, BorderLayout.NORTH);
    getContentPane().add(jtp, BorderLayout.CENTER);
  }

  public static void main(String [] args) {
    JFrame f = new HelloJNLP();
    f.setBounds(100,100,325,250);
    f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
      public void windowClosed(WindowEvent e) {
        System.out.println("Shutting down...");
        System.exit(0);
      }
    });
  }
}

  JNLP的核心是一个发布清单(deployment manifest)。它是一个使用.jnlp做

  扩展名的XML文件(JNLP规范简单的称之为"JNLP 文件")。要发布HelloJNLP,你需要在JNLP文件中描述它,就像下面这样:


<?xml version="1.0" encoding="UTF-8"?>
<!-- file Hello.jnlp -->
<jnlp codebase="http://staff.develop.com/halloway/TechTips/May2001"
href="http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp">
        <information>
    <title>Hello</title>
    <vendor>Tech Tips Sample May 2001</vendor>
    <icon href="HelloJNLP.jpg"/>
  </information>
  <resources>
    <j2se version="1.2+"/>
    <jar href="HelloJNLP.jar"/>
  </resources>
  <application-desc main-class="HelloJNLP"/>
</jnlp>

  这个清单包含客户端需要下载和使用HelloJNLP的所有信息:

  • jnlp元素的codebase属性指出搜索应用程序资源的顶级URL。
  • information元素指出一个JNLP用户接口可以显示给客户端的信息。
  • j2se元素指出客户端必须有1.2版本或者更新的J2SE(tm)。(这是对于applet开发的一个大的提高,因为它常常受限于浏览器提供的VM(虚拟机))
  • jar元素指出程序的JAR文件的相对于jnlp codebase位置。
  • application-desc元素指出要运行的类。你可以添加子元素用以指定命令行参数或者系统属性。

  要将这个应用程序发布给一个web服务器,你需要执行以下的步骤:

  1. 修改jnlp的codebase和hrefURL为你自己的web服务器的合适的URL。

  2. 将JNLP文件发布到web服务器。

  3. 编译并打包HelloJNLP.java并发布到web服务器。例如:

jar cvf HelloJNLP.jar HelloJNLP.class HelloJNLP$1.class

  4. 创建一个图标HelloJNLP.jpg并将之安装在web服务器上。你可以使用

http://staff.develop.com/halloway/TechTips/May2001/HelloJNLP.jpg

  5. 设置你的web服务器的mime-type关联:.jnlp映射到mime-type application/x-java-jnlp-file。例如,对于Apache,添加如下一行到mime.types:

application/x-java-jnlp-file jnlp


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:不同Web主机上的Servlet之间数据对象的相互传输   下一篇:JSP基础知识

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号