Java Web Start 是帮助客户机端应用程序开发的一个新技术,它的独特之处在于将您从关心客户机是如何启动的(从 Web 浏览器或是桌面)中解放出来。另外,该技术提供了一个使 Web 服务器能独立的分发和更新客户机代码的集合部署方案。
Java Web Start 是一个软件技术,它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可维护性以及象 XML 和 HTML 这样的标记语言的简易性。它是基于 Java 的应用程序,允许从标准的 Web 服务器启动、部署和更新功能完全的 Java 2 客户机应用程序。在第一次启动 Java Web Start 时,用户可以从 Web 下载新的客户机应用程序;之后这些应用程序可以通过 Web 页面的链接或(Windows 中的)桌面图标或“开始”菜单初始化。应用程序在 Java Web Start 下快速初始化,被高速缓存在客户机,并且可以远程的离线启动。另外,因为 Java Web Start 是从 Java 2 技术建立起来的,所以它继承了 Java 平台的完整的安全性体系结构。
由于 Java Web Start 自身是一个 Java 应用程序,所以该软件是平台独立的,并且支持 Java 2 平台的任何客户机系统都支持该软件。当客户机应用程序启动时,Java Web Start 自动执行更新,在从原来的高速缓存(倘若存在高速缓存)装入应用程序的同时,从 Web 下载最新的代码。Java Web Start 还提供了一个 Java 应用程序管理器(Java Application Manager)实用程序,既提供了多种选项,如清除下载的应用程序的高速缓存、指定多种 JRE 的使用、设置 HTTP 代理,还允许最终用户组织他们的 Java 应用程序。
Java Web Start 站点: http://java.sun.com/products/javawebstart/
JNLP规范: http://java.sun.com/aboutJava/communityprocess/jsr/jsr_056_jnlp.html
一.当用户首次单击一个链接来启动一个客户端的 Java 应用程序时,发生下面的过程:
1.Web 浏览器被指示运行 Java Web Start。
2.Java Web Start 以启动闪屏开始
3.然后 Java Web Start 与指定的 Web 服务器联系,并且确定是否为所要的 Java 应用程序下载了所有的文件。
4.把适当的文件下载到本地机。
5.Java Web Start 运行下载的应用程序。
二.当选择是否为与 Java Web Start 兼容而开发应用程序时,明智的做法是对用户体验做全面考虑。
1.Java Web Start 必须安装在每台从 Web 或从 Java 应用程序管理器启动客户机 Java 应用程序的机器上。所以,虽然客户机 Java 应用程序可以从 Web 页面启动,但如果最初没有 Java Web Start 安装在本地机上的话,该应用程序本身是不能启动的;这样 Web 浏览器仅提供启动程序的方便的链接 ― 不多不少。
2.Java Web Start 仅对正确打包的并且依照 Java Web Start 指导方针的应用程序有用。另外,需要 Web 服务器,而且 Web 服务器必须正确的配置来解释 所有的JNLP 和 MIME 标记。所以,除非下载的或是从 Web 启动的所有的客户机 Java 应用程序满足了这些要求,每个客户机 Java 应用程序才能从 Java Web Start 被启动和被管理的。
3.在用户中也许有点关于 Java Web Start 和 Java 插件的应用程序与 applet 间的不同之处的困惑。用户可能理解或还不理解为什么 Java Web Start 能管理和启动许多的客户机 Java 应用程序,却不能与以 Java 插件运行的 Java Applets 建立任何连接,尽管事实是任一程序都可以从 Web 浏览器启动。
4.对于被要求去为仅仅一个客户机应用程序而下载 Java Web Start 的用户来说,可能又认为对一个客户机 Java 应用程序的执行来说,Java Web Start 应用程序管理器的特性很累赘,安装过程“麻烦”太多。
5.Java Web Start 仅能用于为 Java 2 平台编写的客户机 Java 应用程序。
6.当前,Java Web Start 可在 Windows 95/98/NT/2000、Linux 和 Solaris 操作系统上执行。
三.开发和部署 Java Web Start 的客户端 Java 应用程序时需要依照的一些简单的规则:
1.应用程序可以作为针对 Java 2 平台的独立的应用程序正常的编写。
2.如果您的应用程序需要访问本地系统,那么 JAR 文件中的每个条目都必须被签名。
3.应用程序的所有的文件必须保存在一个 JAR 文件集中,该文件集包含如图像和声音文件等资源。
4.装入资源(如图像)的任何访问都必须使用有类装载器的 getResource 方法。
四.Java Web Start 的核心:JNLP
为使 Java 应用程序能用 Java Web Start 执行,您必须为应用程序创建一个 Java 网络语言协议(Java Networking Language Protocol,JNLP)文件。JNLP 是一个为应用程序提供基本的元素和描述的 XML 文件。JNLP 文件的目的如下:
1.指定从 Web 服务器下载的 JAR 文件
2.提供其它的可能的包需要
3.指定系统属性
4.考虑到任何必要的运行时参数
5.指定使用哪个版本的 Java 2 平台
xml 代码
- xml version="1.0" encoding="UTF-8"?>
- <jnlp spec="1.0+" codebase="http://192.168.1.106:8000/jwsTest/" href="jwsTest.jnlp">
- <information>
- <title>This is my company's Java client applicationtitle>
- <vendor>Company name
- r>
- <icon href="companyLogo.gif"/>
- <homepage ref="reference/tips.html">
- <offline-allowed/>
- information>
- <resources>
- <j2se version=”1.3”/>
- <jar href="companySong.jar" part="music" download="lazy"/>
- resources>
- <resources os="Windows"/>
- <nativelibnativelib="windowIconsForWindowOS.jar" part="windowIcons" download="eager"/>
- <application-desc main-class="com.company.ui.Client"/>
- <security>
- <all-permissions/>
- security>
- jnlp>
JNLP文件的描述:
A.第一行,您可以看到文件的编码是 UTF-8 字符编码。所以,当编辑 JNLP 文件时,最终文件要用与 JDK 一起提供的 native2ascii工具转换来确保文件的编码正确。
B.jnlp codebase 属性用于在 JNLP 文件中指定所有的相关 URL。 href 属性设置(要求的)是为了让应用程序并入 Java Web Start 应用程序管理器。
C.information 标记(如 title、vendor 等)用于提供来自 Java Web Start 应用程序管理器的关于应用程序的附加信息。 homepage ref 属性是专门用于指向 Web URL 从而用户可以去提供了关于应用程序的更多的信息的 Web 页面。最有趣的 information 标记是 offline-allowed 属性;该属性决定了客户机 Java 应用程序是否能离线启动。当离线运行客户机 Java 应用程序时,Java Web Start 将继续判定来自 Web 服务器的最新的文件;在多数情况下,这个方案将引起快速的超时(因为位置被指定要离线启动),并且应用程序从本地高速缓存启动。
D.resource 标记考虑到 JNLP 文件指定应用程序使用哪些 JAR 文件和如何下载 JAR 文件;即,是急切的还是不紧不慢的。这个特性在当用户要下载大量的文件而对用户来说不是所有的文件都是客户机执行所需要的时是非常有帮助的。缺省的,多数资源是急切的下载的,在这样情况下,JAR 文件和资源在应用程序启动前被下载。不紧不慢的下载的资源只有当 Java 虚拟机(JVM)触发从应用程序载入资源或文件时才被下载。不紧不慢的下载资源的一个示例是客户机的帮助文件;考虑到了客户机的更快的启动和执行,只有在用户实际上向客户机请求帮助文件时,才会下载这些文件。然而,一旦用户请求了一个帮助文件,在请求过程中适当的 JAR 就会被下载,并伴有一个通知用户大致的下载时间的窗口。
E.JNLP 文件中最后一个有趣的标记是 security 属性。缺省的,任何从 Java Web Start 客户机启动的 Java 应用程序在一个安全的、受限制的环境执行,该环境中不允许进行本地文件访问、与其它计算机的网络连接等等。然而,对于要对客户机和网络可以完全访问的特性丰富的客户机来说, all-permissions 值是用于给予客户机完全访问的权限的。为具有对本地机的完全访问,Java 应用程序所使用和装入的所有 JAR 文件和资源必须被数字签名。
一.搭建支持JWS的Web站点
1.你的Tomcat已经正常运转
2.找到TomcatHOME/conf下的web.xml文件,在其中添加 application/x-java-jnlp-file 以支持JNLP文件.
二.部署应用程序
1.开发你希望发布的应用程序
2.把应用程序及所用到的所有资源打成一个或多个jar包
3.如果你的应用程序不会用到任何运行这个应用程序的机器的本地资源,那么,你的应用程序就可以部署了。
4.如果你的应用程序用到了运行这个应用程序的机器的本地资源,那么,你的应用程序就必须先签名然后才可以发布。
5.如何给应用程序签名
A.首先确保你已经完全安装了Java2的环境,有keytool工具,它位于J2SE SDk的bin目录下。这一般不会有问题。
B.到Dos状态下,进入你需发布应用程序的jar包所在的目录,运行下面这句话
keytool -genkey -keystore myKeystore -alias jwstest
它将会提示你输入用户名、密码等,不用理它,按照提示随便输入即可,但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore的文件。
C.如果你想察看一下刚才生成的myKeystore文件的内容,可以使用下面这句话,再输入密码:
keytool -list -keystore myKeystore
显示出来应该类似如下:
Keystore type: jks
Keystore provider: SUN
Your keystore contains 1 entry:
jwstest, 2006-7-12, keyEntry,
Certificate fingerprint (MD5): D7:CE:DD:5C:EC:78:92:B3:9E:51:88:A6:1E:4E:94:9C
D.对你需发布应用程序的jar包进行签名,运行下面这句话:
jarsigner -keystore myKeystore yourtest.jar jwstest
其中yourtest.jar是你的jar包名,你需要修改它,别的就不必修改了。运行时会提示你输入密码,就是你刚才在生成myKeystore文件时设定的密码。
6.部署应用程序。
把已经经过签名的jar包拷入Web工程的目录下(注意:不能拷到WEB-INF目录下!)
三.JNLP文件
1.下面我们来编写JWS的核心配置文件JNLP,有了它,才能将以上各部分联系起来,真正让JWS运转起来。JNLP文件符合标准的XML语法,实质就是一个XML文件。当然,编写它
的最好方式是对已写好的JNLP进行改写。JWSTest.jnlp示例如下:
xml 代码
- xml version="1.0" encoding="utf-8"?>
-
- <jnlp spec="1.0+" codebase="http://192.168.1.106:8000/jwsTest/" href="jwsTest.jnlp">
- <information>
- <title>JWS Testtitle>
- <vendor>Silent Wongvendor>
- <homepage href="http://silent" />
- <description>JWS Testdescription>
- <icon kind="png" href="eclipse48.png" />
- <offline-allowed />
- information>
- <security>
- <all-permissions />
- security>
-
- <resources>
- <jar href="startup.jar" />
- <jar href="plugins/MyPlugin_1.0.0.jar" />
- <jar href="plugins/org.eclipse.core.commands_3.1.0.jar" />
- <jar href="plugins/org.eclipse.core.expressions_3.1.0.jar" />
- <jar href="plugins/org.eclipse.core.runtime_3.1.2.jar" />
- <jar href="plugins/org.eclipse.help_3.1.0.jar" />
- <jar href="plugins/org.eclipse.jface_3.1.1.jar" />
- <jar href="plugins/org.eclipse.osgi_3.1.2.jar" />
- <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.1.2.jar" />
- <jar href="plugins/org.eclipse.swt_3.1.0.jar" />
- <jar href="plugins/org.eclipse.ui.workbench_3.1.2.jar" />
- <jar href="plugins/org.eclipse.ui_3.1.2.jar" />
-
- <property name="eclipse.product" value="MyPlugin.MyPlugin"/>
-
- resources>
-
- <resources os="Mac">
- <j2se version="1.5+" java-vm-args="-XstartOnFirstThread"/>
- resources>
- <resources os="Windows">
- <j2se version="1.5+"/>
- resources>
- <resources os="Linux">
- <j2se version="1.5+"/>
- resources>
-
- <application-desc main-class="org.eclipse.core.launcher.WebStartMain">
- <argument>-nosplashargument>
- application-desc>
- jnlp>
2.部分JNLP的关键语法
<jnlp>元素
spec:必须是1.0及以上版本,这里用1.0+,不需修改。
codebase:资源的URL,是JNLP指向各连接的起始处,需自行修改。
Href:JNLP文件相对codebase的存放位置,和JNLP文件的全名,需自行修改。
<infomation>元素
Title:发布的应用程序简单标题,需自行修改。
Vendor:发行商信息,可以写上你的大名,需自行修改。
Homepage:存放有关应用程序的相关文档的URL,如help文件等,可有可无。
Description:对应用程序的描述,可以有多对<description></description>,可有可无。
Icon:用户下载你的应用程序后,在JWS里显示的图标的URL,应是gif或jpeg格式。需自行修改。
Offline-allowed:选择项,允许用户离线运行应用程序,一般都会有,不用修改。
<security>元素
选择项,如果没有指明<security>,默认是不允许应用程序访问用户的本地资源,即应用程序是沙箱运行。
如果设定为<all-permissions/>,则表示允许应用程序访问用户的本地资源。一般都会设定此值。
<resource>元素
<j2se version = 指定jdk版本>
<jar href = 指定需发布的应用程序的jar包存放的位置>
<application-desc>元素
main-class:应用程序运行启动的主类
<argument>:应用程序运行时的参数,可以有多个,每一个参数用一对<argument>参数</argument>。
四.Jsp页面
1.编写用于Web访问的页面加入如下:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<a href="<%=basePath + "jwsTest.jnlp"%>">launch</a>
五.完整发布和测试
前面我们已经准备好了需发布的应用程序的jar包,也写好了用来访问的jsp文件和服务器端的核心jnlp文件。
至此,我们已经完成得七七八八了,剩下只需将Web工程发布到tomcat上,再打开IE......