传统情况下,通过网络发布软件需要用户在Web上查找和下载,然后在系统中存放并执行安装程序。执行安装程序后,将提示指定安装路径和安装选项,例如完全、典型或最小安装。这通常是一个耗时、复杂的任务,而且在安装软件的每个新版本时都必须重复进行此任务。
Java Web Start(JWS)是Sun公司推出的新的一种基于Java技术的应用程序发布技术。它是连接计算机和 Internet 的便捷通道,并且允许用户在完全脱离Web 的情况下运行和管理应用程序。JWS提供一次点击就激活应用程序的简易方法,并保证总是运行最新的版本,从而可消除复杂的安装或升级过程。JWS技术是一种面向Web的应用程序部署解决方案,使用JWS技术的好处如下:
1. 高效交互的用户界面,可与传统应用程序(如文字处理和电子表格软件)相媲美;
2. 较低的带宽需求,应用程序无须在每次单击时都与Web服务器进行连接,它可以缓存已经下载的信息,在低速连接上实现更好的交互;
3. JWS将下载的所有文件缓存在本地计算机上,支持脱机使用;
4. 在每次启动时,JWS将检查Web服务器是否有应用程序的更新版本,如果有将自动下载和启动。这样,应用程序将自动更新,没有复杂的升级过程。
JWS的实现
为了实现JWS软件发布、自动更新功能,需要在服务器端和客户端进行一些配置。其中客户端配置相对比较简单,只需要安装JWS客户端软件即可。该软件可以从http://java.sun.com/products/javawebstart下载安装。如果本机安装了JDK1.4,因其内部已经内置JWS,就不必另外下载了。
客户端正确安装JWS以后,就将基于Java网络加载协议(JNLP)从浏览器或者桌面加载应用程序。如果服务器端有更新版本的应用出现时, 客户端将自动下载最新的版本,并在本机缓存应用程序需要的类,以加速启动速度。无论是Application 还是Applet,应用程序都以安全的方式使用诸如文件系统这样的本机资源。
服务器端的配置相对复杂一些,它有几个关键点需要注意:
1.为了使Java程序(Application 或Applet)的Jar文件能被JWS执行,必须为Java程序创建一个网络语言协议(Java Networking Language Protocol,JNLP)文件。JNLP是一个为Java程序提供基本元素和描述的XML文件,它的后缀名为.jnlp。通过JNLP文件,Web服务器可以找到要发布的Jar文件和其在Web服务器上的存放位置,以及发布文件的一些说明。所以,正确编写JNLP是JWS配置的关键所在。JNLP语法比较简单,可以参考JWS说明文档。
2.因为Java程序需要从网上传输、下载和运行,所以分离的Class文件是很难保证传输的完整性,这样必须将Java应用程序或Applet打包,生成Jar文件,并放在Web服务器的相应目录下。
3.修改Web服务器配置,增加Web服务器的关联类型,使Web服务器能够识别和运行.jnlp文件。以Tomcat为例,找到TomcatHOME/conf下的web.xml文件,在其中添加application/x-java-jnlp-file ,Tomcat就可以支持JNLP文件了。
使用JBuiler6快速实现JWS
尽管JWS的应用有许多优点,但初学者刚刚接触时还是有一种无从下手的感觉。这时,可以使用JBuider 6的JWS相关功能,实现Java程序打包和自动生成.jnlp文件,然后对该文件进行修改,再安装在Web服务器上。以下为建立Login JWS的操作步骤:
1.在JBuilder 6下建立名字为Logconsole的项目,在该项目中加入一个名为Log的Applet,编译并运行,以保证logconsole.Log.class工作正常,这一步与编写普通Java程序完全一样,在此不再做进一步介绍。
2.使用Archive Builder工具将Class文件打包,步骤如下:
(1)在Jbuilder6工具栏中选择Wizard|Archive Builder,弹出“Archive Builder”5个步骤中的第一步―选择文档类型,按缺省设置选择“Basic”,点击“Next”。
(2)选择要建立的文档名及文件名,如图1所示。文档名设为Logconsole,文件名按缺省值即可。
3)在文档中加入所需的Class文件以及相关的类和资源文件。点击“Add classes”键,选择刚才生成的logconsole.Log.class,该Class文件名就会出现在“Required classes,packeges,resources:”文本框中,点击“Next”。
(4)选择类库的关联性,这是最容易出错的地方,如图2所示。一般在项目设置中,我们可能增加了许多类库,像图中的mysql驱动程序。因为本程序并不需要这些类库,所以一定要把它们设置为“不包括”,否则,最终生成的Jar文件会非常大
5)生成Jar文件的最后一步是设置清单(manifest)选项,注意一定要选上“建立一个清单”和“在文档中包含清单”这两项。点击“Finish”键,Jar文件的配置文件就生成了,然后点击“Project|Rebuilder Project”工具项,就可以最终生成Jar文件了。
3.使用JBuilder 6生成JNLP文件。
(1)在JBuilder6“File|new|Web”页面上选择“Web Start Launcher”,弹出窗口如图3所示,“Name”栏中输入“log”,“JAR file”中选择我们刚才生成的logconsole.jar,“Main class”中指定jar文件中的主类(程序入口),在本例子中只有一个类,就选择logconsole.Log,点击“Next”,进入下一步。
(2)如图4所示,主要是输入一些信息,它将会在客户平台启动JWS时显示出来。点击“Finish”,JBuilder 6就会自动生成log.jnlp文件了。
JWS 应用实例
笔者使用Java语言设计了一套网关型宽带网计费软件,分为服务器端和客户登录程序。服务器端的功能是根据应用客户登录程序发送过来的用户名、密码及客户端IP地址,来实现身份认证。如果认证成功,服务器开放客户端的IP地址,开始计费。在设计时,如何将登录程序既能安装在校园网近3000余台的电脑上,同时又能很方便地升级登录程序让笔者颇费脑筋。最终选用JWS技术顺利解决了此问题,并且取得了非常好的效果。具体步骤如下:
1. 在Login网页上提示用户下载并安装JWS 客户端软件。
2. 使用Java编写客户端登录程序(Applet),将所有.class文件打包并生成.jar文件。
3. 采用Tomcat作为Web服务器,在%TomcatHOME%/conf下的web.xml文件中添加 “ application/x-java-jnlp-file ”一行,使Tomcat支持JNLP文件。在%TomcatHOME%/webapps/proxy/WEB-INF/下的webapp.properties 文件中设置welcomefiles=log.jnlp,确保.jnlp文件作为缺省主页。
4.使用JBuiler6生成log.jnlp文件,将该文件安装在Tomcat的相应目录下,整个工作就完成了。log.jnlp内容如下:
log
NIT NetCenter
其中,.jnlp文件是JWS 配置中的关键。如果程序不能正常发布,绝大多数问题出在JNLP文件上。在本文实例log.jnlp中,最关键的语句用黑体标出,初学者可以在JBuilder 6的JNLP生成向导中有意调整几次,生成几个文件,并进行比较,就能够明白了。