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

使用JNLP和Java Web Start发布软件

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]
lanf ,Linuxaid.com.cn
原作:John Zukowski

  发送客户端Java程序最近成了一个令人畏惧的事情。浏览器之间的差异——不仅是JRE的版本还有安全结构——使很多开发人员放弃了丰富的客户端方案而更倾向于使用服务器端Java技术,JSP和serlvets。但是现在java web start——及下面的Java Network Launch Protocol (JNLP) ——是java 2 平台的一个标准部分(就和1.4版本一样),它可以很容易的就发布一个交叉平台和客户端系统。

  在这篇文章里,你将了解什么是Java Web Start和JNLP,及如何使用Java Web Start运行JNLP运用程序,还有如何建立和发布你的东西。

介绍Java Web Start

  很简单,Java Web Start是一个通过标准Web服务来传送程序的机制。与众不同的是从浏览器开始,程序传送到客户端并在浏览器之外的地方发布。一旦发布,程序就不再需要再次下载,而且它们可以在计算机启动的时候自动下载更新而不需要使用者从头到尾的经历整个过程。

  因为程序都是在浏览器以外运行,你可以认为他们可以自由的执行操作,当然,这些操作都是在一个applet的限制下进行的。不仅如此,他们仍然需要在一个受限制的容器或者是sandbox中运行。因为Java Web Start 运行于java平台的顶端,所以你有权使用下面的安全结构。

  使用Java Web Start ,你仅仅需要做的是安装客户端。对于windows平台,如果你是一个开发者需要安装的是java 2 Software Development Kit (SDK) 版本1.4,Java Web Start会被安装到C:Program FilesJava Web Start目录下。Solaris/Linux的使用者需要运行一个SDK附带的安装脚本。阅读README注意有关SDK的附加信息。

  虽然开发人员可以将Java Web Start先前安装在他们的系统中,但使用者可能不会。在这种情况下,当某个人想运行一个JNLP程序而又没有安装Java Web Start时,系统会提示你安装Java Web Start 。安装完毕,再次启动,你就可以运行你的程序了。

Java Web Start 示例

  为了理解Java Web Start是如何的运行的,我们看看Sun提供的五个示范程序:Draw, The SwingSet Demo, Military Game, A Simple Notepad, and Application Manager。如果你在此之前没有安装Java Web Start,点击任何一个开始按钮转到下载页面,下载一个适合你的平台的Web Start。Java Web Start本身只有1 MB。但是它需要JRE,所以,如果你没有JRE,下载的大小会增加,对于windows平台,它不超过6MB。

  Java Web Start安装完毕以后,点击开始按钮开始下载应用程序。例如,如果你开始下载一个军事游戏,你将看见一个与此类似的窗口。

  如果你运行一个Draw或者Notepad程序,当你试图载入或保存一个文件到本地(从/到一个客户端),装入程序将打破sandbox。这时一个安全警告将弹出,与下面这个相似。

  至少在windows平台中,Java Web Start总是将程序的启动和系统使用便利结合在起来。意思是说当一个使用者用Java Web Start 启动一个程序数次,Java Web Start会询问使用者是否希望安装程序的快捷方式,如在桌面上或是在开始菜单中。

  这个次数是可以设定的,默认的次数是两次。一旦安装,使用者可以越过浏览器和应用程序管理器从桌面或者开始菜单启动程序。

建立你的第一个程序

  为了真正的理解Java Web Start,我们将建立一个程序并且通过Java Web Start 发布它。很多工具比如Borland's JBuilder可以自动完成很多的任务,但是除非你自己亲自动手,否则你就不能真正的掌握这些知识。

  要求你完成的程序是显示由United States National Institute of Standards and Technology(NIST)提供的Internet Time Service(ITS)。他们提供一项服务容许你连接到他们的服务器获得美国的官方时间。你要做的就是连接它,并将时间显示出来。

  你可以通过端口13中连接他们服务器的DAYTIME服务,并且只读取它们的响应。你甚至不需要发送请求;连接端口就是你的请求。返回的响应首先是一个空行,接着是日期和时间行。

  Socket socket = new Socket("time.nist.gov", 13);
  InputStream is = socket.getInputStream();
  InputStreamReader isr = new InputStreamReader(is);
  Buffered reader = new BufferedReader(isr);
  reader.readLine(); // skip blank line
  String message = reader.readLine();

  给出格式化了的时间,包括象征符号和一组数字。重要的信息放在前面,包括Julian Date,两位数的年,月,日及小时,分钟,秒。

JJJJJ YR-MO-DA HH:MM:SS TT L H msADV UTC(NIST) OTM
52453 02-06-28 07:41:36 50 0 0 872.9 UTC(NIST) *

  下面这段代码将日期和时间信息封装,这样它可以在它自己的窗口中显示。JFrame.EXIT_ON_CLOSE 要求你使用版本1.3或者Java 2 平台编译这个程序。


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

public class TheTime {
  public static void main(String args[]) {
    JFrame frame =  new JFrame("Time Check"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel label = new JLabel();
    Container content = frame.getContentPane();  
    content.add(label, BorderLayout.CENTER);
    String message = "missing";
    BufferedReader reader = null;
    try {
      Socket socket = new Socket("time.nist.gov", 13);
      InputStream is = socket.getInputStream();
      InputStreamReader isr = new InputStreamReader(is);
      reader = new BufferedReader(isr);
      reader.readLine(); // skip blank line
      message = reader.readLine();
    } catch (MalformedURLException e) {
      System.err.println("Malformed: " + e);
    } catch (IOException e) {
      System.err.println("I/O Exception: " + e);
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException ignored) {
        }
      }
    }
    label.setText(message);
    frame.pack();
    frame.show();
  }
}


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



上一篇:让Linux“开口”讲英语   下一篇:安全操作系统研究的发展

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章