`

Java Web Start

 
阅读更多

转载http://blog.csdn.net/glchengang

 

Java Web Start简介

最近由于工作关系,老大嘱咐我看一下Java Web Start。以前安装JDK时,会在“开始”菜单加一个快捷菜单“Java Web Start”,也不知是做什么用的,我一般都是删除。今天从网上查了一下资料,不看不知道,一看吓一跳,觉得这JWS(Java Web Start简称)很象传说中的“服务器端小程序下载运行”。而且JWS很早就有了,我看有些文章资料已经是2002年发的,自己竟然全然不知它的存在,实在是愚昧呀。

1. JWS有什么用

B/S风行的一个很大原因就是它有部署方便的优势,这是C/S的Application所无法比拟的。现在,JWS让用户可以下载服务器端的Java Application到本机运行,并且没有安装、配置等繁琐的操作。SUN网站上有Demo,大家可以体验一下效果:http://java.sun.com/products/javawebstart/demos.html

2. JWS的运行原理

浏览器的运行Java Applica ton的链接指向的不是程序本身,而是一个*.jnlp文件,这个文件包含了Java Application的一些配置信息。然后JWS解读这个文件的信息,将服务器端的Java Application下载到本机上,并运行。

当然第一次运行程序时,由于要下载所以速度会稍微慢一些,不过第二次运行时,JWS会自动去服务器上检查是否有新的程序版本发布,如果没有就会直接运行本机已经下载的程序,这就和运行本机Java Application没什么区别了。运行程序之初,JWS还会提示你是否创建一个相应的快捷菜单。

程序下载到本机的默认位置是:“C:\Documents and Settings\admin\Application Data\Sun\Java\Deployment\javaws\cache\indirect\indirect12423.ind”,你可以在本机的“JWS应用程序管理器”的里重新设置此存放目录。

 

JWS无疑要比Applet的应用范围更广(据说还得过**的最佳创意奖),它对于布署一些小型的程序应用是非常方便的,但我以为现在还主要适用于局域网。因为一个程序一般约有几十M,如果是Internet用户第一次的下载速度会很慢。

3. 安全性问题。

但和Applet一样,JWS也面临安全性问题,默认情况下JWS对本机磁盘和本地网络的访问是有限制的。如果该程序要越权访问,这时会弹出一个警告框(类似于ActivX的数字签名),用户可以自已决定是否信任该软件,而对其放开限制。

4. JWS的优缺点

JWS的优点就是让程序的布署更简单,而且用户端的应用可以时刻保持和服务器端的最新版本同步,这为升级版本提供了很大的方便。

缺点也是明显的,由于要运行应用必须一次下载所有的程序文件(JWS的jnlp配置文件有个lazy选项,但作用不明显),所以第一次下载速度很慢,不适用于互联网。从这一点来看B/S形式的应用还是有优势的。

 

参考资料

http://www.chinaitlab.com/www/news/article_show.asp?id=25239

http://blog.csdn.net/emag_java/archive/2005/01/13/252047.aspx

 

 

Java Web Start实例

1、示例说明

由于本BLOG现主要以Eclipse和SWT为内容,所以Java Web Start(简称JWS)也以一个SWT应用程序来做为示例。

本文用<Eclipse开发指南>书中打包一章的打包结果为示例,该示例为一个SWT/JFace程序,其打包后的文件结构如下:

 

l myswt是主包,里面含有自己写的程序代码

l swt-win32-3063.dll是本地化文件

l lib子目录下还有三个jar文件:jface.jar、runtime.jar、swt.jar,这三个文件是SWT程序的支持库。

如果是在本地运行此程序,双击myswt.jar即可(要求Windows中jar格式的文件默认用javaw.exe打开,如下图所示:

 

现在我们要将这个程序用JWS部署到服务器端,然后编写一个网页,让用户单击网页上的链接就可以下载该SWT程序并运行。

2、准备工作

本人的环境为:WinodwsXP SP2 + JDK1.4.2 + Tomcat 5.0.28

(1)首先得先安装Tomcat,这一步的操作方法本文省略

(2)在Tomcat的webapps\ROOT路径下创建一个“myswt”目录。在我的电脑上,其绝对路径如下:E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\myswt。

(3)将前面所述的SWT程序的文件复制到webapps\ROOT\myswt目录中。

3、生成证书

创建一个批处理文件:key.bat

c:\jdk\bin\keytool -genkey -keystore myKeystore -alias myself

c:\jdk\bin\keytool -list -keystore myKeystore

pause

内容说明:

l keytool是JDK自带的一个工具,用于数字签名。在我的电脑,它是位于c:\jdk\bin\路径下,由于我没有设置环境变量path,所以在批处理文件中硬性指定keytool的路径。如果是自己用或者公司内部用,象本文这样用keytool生成一个自签名的证书也就可以了。但如果你想让签名更正式一些,以获得其他用户的信任,最好去认证中心(如 Thawte 或 VeriSign)获取一个证书。

l 第一句将生成一个证书,文件名:myKeystore

l 第二句是列出密钥证书中的所有入口。(这一句是可选的,只是为了显示出来看一下,不要也行)

l 最后一句是暂停pause,以便批处理完成后,我们可以回顾一下全过程。

 

运行批处理key.bat后的全部输入过程如下图所示:

4、用证用为应用程序签名

(1)因为签名只认jar包,所以先将swt-win32-3063.dll文件用WinRAR或c:\jdk\bin\jar打一个jar包(swt-win32-3063.jar)。客户端下载后,会自动解开此包,将swt-win32-3063.dll还原到客户端。

注意:如果你用WinRAR打包,在压缩时必须选ZIP格式,不能选RAR格式。

 

(2)创建一个用于签名的批处理文件:jarsigner.bat,其内容如下:

c:\jdk\bin\jarsigner -keystore myKeystore myswt.jar myself

c:\jdk\bin\jarsigner -keystore myKeystore lib\jface.jar myself

c:\jdk\bin\jarsigner -keystore myKeystore lib\runtime.jar myself

c:\jdk\bin\jarsigner -keystore myKeystore lib\swt.jar myself

c:\jdk\bin\jarsigner -keystore myKeystore swt-win32-3063.jar myself

pause

这里每一条命令都要求你输入密码,它就是在创建证书myKeystore时设置的那个密码。至此,签名证书部份完成了,下一步是创建jnlp文件。

5、创建jnlp文件

(1)创建一个名为myswt.jnlp的jnlp文件,这个文件是Java Web Start的核心配置文件,其内容如下:

<?xml version="1.0" encoding="GBK"?>

<jnlp codebase="http://localhost:8080/myswt">

 

<information>

<title>子在川曰(http://blog.csdn.net/glchengang)</title>

<vendor>陈刚</vendor>

<offline-allowed/>

</information>

 

<security>

<all-permissions/>

</security>

 

<resources>

<j2se version="1.4+"/>

<jar href="myswt.jar"/>

<jar href="lib/jface.jar"/>

<jar href="lib/runtime.jar"/>

<jar href="lib/swt.jar"/>

<nativelib href="swt-win32-3063.jar"/>

</resources>

 

<application-desc main-class="jface.dialog.wizard.WizardDialog1"/>

 

</jnlp>

说明:

l encoding="GBK" 本文选择了GBK,一般来说应该用UTF-8。我在这里之所以选择GBK字符集,主要是为了演示示例方便,如果是正式应用,还是应该改为UTF-8。如果用UTF-8,则该文件的中文要转换成UNICODE码,否则实际运行时将显示乱码,你可以用c:\jdk\bin\native2ascii.exe来进行“汉字->UNICODE”的转换。

l codebase="http://localhost:8080/myswt" 本应用程序的URL

l <information>项,是一些显示信息,<title>、<vendor>都是必选的。<offline-allowed/>是可选的,它表示允许应用程序脱机运行(不和服务器联网)。

l <security>项是指开放用户本机的所有权限给应用程序,这一项会导致弹出一个数字签名对话框。

l <resources>列出了用户需要下载的资源。<j2se version="1.4+"/>是指,要求用户本机安装Java1.4以上版本。<nativelib>是指此包含有本地文件,这时JWS下载后会将此包解开。

l <application-desc>指定了程序的入口类,你也可以指定其他的入口类,它不受限制。jface.dialog.wizard.WizardDialog1是myswt.jar包中的一个向导式对话框,这是我自己编写的一个SWT程序。

(2)创建一个HTML网页

创建一个HTML网页,网页指向jnlp文件。我们给此HTML网页取名:test.html,其内容如下:

<A HREF="myswt.jnlp">启动</A>

6、最后效果

(1)最后的服务器的目录结构如下图所示:

 

(2)用浏览器浏览:http://localhost:8080/myswt/test.html

 

单击“启动”后出现下图,开始从服务器上下载SWT应用程序:

 

下载完成后,出现如下图,提示用户是否向应用程序开放本机所有权限(弹出这个对话框是由jnlp文件中的<security>项设置决定的)。

 

单击“启动”按钮,将运行程序,出现下图。(附注:这里没有弹出提示你添加快捷菜单的对话框)

 

7、其他注意事项

(1)如果单击网页的“启动”链接时,显示的是jnlp文件的内容,还非下载服务器的应用程序。这时你需要做如下检查:

l 在Windows中,jnlp格式的文件应该默认用javaw打开。如果你把它改变成了用记事本或其他程序打开,就也会出错。

l WEB服务器是否能否辨识jnlp、jar、class文件的格式。如果你是用Tomcat,可以打开conf目录的WEB.XML文件检查一下。一般来说,较新的WEB服务器都支持jnlp,如果Tomcat、WebLogic等(微软的IIS不支持Java,当然也不可能支持jnlp,我是这么想的没去测试过)。如果不支持,就在WEB服务器的配置文件里加上下面的内容。

<mime-mapping>

<extension>class</extension>

<mime-type>application/java</mime-type>

</mime-mapping>

<mime-mapping>

<extension>jar</extension>

<mime-type>application/java-archive</mime-type>

</mime-mapping>

<mime-mapping>

<extension>jnlp</extension>

<mime-type>application/x-java-jnlp-file</mime-type>

</mime-mapping>

(2)在使用Java Web Start的时候可能会出现"下载资源错误",大致的出错信息如下:

JNLPException[category: Download Error : Exception:

java.io.IOException:

rename failed in cache : LaunchDesc: null ] at.....

这个错误的原因是因为每次调用Java Web Start都会到server上查找程序是否更新,然后将程序下载到本地的java web start目录下的cache目录中,如果cache中已经有同名文件,而且该文件正在被使用,那么新下载的文件就会出现 rename failed错误,而且手工去删除本地的文件还会报错:文件正被使用!

这里涉及到Java Web Start中的sign机制,可能对每个jar文件都需要标记,有的时候会在任务管理器中看到javaw.exe在运行,将该程序终止后就可以将本地的jar文件删除掉,说明这些本地文件可能还保留着文件锁定吧!有时即使将Task Manager中将所有的java程序都kill掉还是会出错,必须要注销windows才可以,不知道是不是Java Web Start

(3)如果需要给*.jar文件传递参数,可以用如下代码:

<application-desc main-class="XBFrame"/>

<argument>-port</argument>

<argument>1008</argument> '' 要注意-port 和1008是两个参数,要分开写.

</application-desc>

(4)有的时候还需要看到*.jar中System.out.print语句输出的信息,就要打开jws的console,可以在jws manager 中的首选项中设置

(附注:(2)、(3)、(4)照抄<<java web start实现关键问题(二)>>一文)

(5)如果出现失败,最基本的查错手段就是看看出错的“详细信息”,如下图所示。

 

单击“详细信息”按钮,出现下图

 

 

参考资料

http://www-900.ibm.com/developerWorks/cn/java/j-webstart/index.shtml

http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-jws/index.shtml

http://www-900.ibm.com/developerWorks/cn/java/l-webstart/index.shtml#author1

http://dev.csdn.net/article/14/14216.shtm 学用Java Web Start 部署应用程序

http://ecolab.ruc.edu.cn/new/Article_Show.asp?ArticleID=80 关于java的数字签名

http://www.51one.net/info/3291681715538397.htm java web start实现关键问题(二)

 

分享到:
评论

相关推荐

    Java Web Start .txt

    Java Web Start 是一种由 Sun Microsystems 开发的技术,用于在客户端机器上方便地部署、启动和更新基于 Java 的应用程序。这项技术结合了 Applet 的可移植性、Servlet 和 JSP 的可维护性,以及类似 XML 和 HTML 的...

    Java Web Start 签名

    Java Web Start 签名是Java应用程序在Web环境中运行时的一种安全机制,它允许用户从不可信的网络源下载并执行代码,同时确保代码的完整性和来源可信。这个技术主要应用于Java Applets和Java Web Start应用程序,通过...

    java web start

    Java Web Start 是一种由Oracle公司开发的技术,用于在Web浏览器中启动基于Java的富客户端应用程序。这项技术在Java Development Kit (JDK) 1.4版本中首次引入,允许用户无需通过复杂的安装过程就能运行Java应用程序...

    利用 Java Web Start发布你用java程序

    ### 利用 Java Web Start 发布 Java 程序 #### JWS——Java Web Start 的功能与优势 Java Web Start(简称 JWS)是 Sun Microsystems(现 Oracle)为解决 Java 应用程序部署和更新问题而开发的一项技术。它是 JSR-...

    java web start教程

    Java Web Start(JWS)是SUN公司推出的一项技术,用于通过Web来部署和发布Java应用程序,无论是Application还是Applet。这项技术在初次运行时会下载程序,之后的版本更新和维护都由JWS自动处理,极大地简化了客户端...

    深入探索Java Web Start:简化Java应用部署与更新

    Java Web Start,也称为Java Network Launch Protocol(JNLP),是Oracle提供的一种技术,用于从Web上启动和自动更新Java应用程序。它允许用户通过一个Web链接启动富客户端Java应用程序,同时确保应用程序始终保持...

    Deploying Java Web Start Applications on the JBoss Application Server

    ### 部署Java Web Start应用程序到JBoss应用服务器 #### 概述 本文将详细介绍如何在JBoss应用服务器上部署Java Web Start应用程序,并利用Java Web Start技术实现客户端图形用户界面(GUI)的自动更新。Java Web ...

    用java web start来发布jbpm(三)

    Java Web Start(JWS)是Java平台上的一种技术,用于便捷地部署和运行基于网络的Java应用程序。它允许用户通过点击Web浏览器中的链接来启动和更新应用程序,而无需手动下载和安装。在本篇博客“用java web start来...

    LIFERAY + JAVA WEB START + OSWORKFLOW设计器

    【LIFERAY + JAVA WEB START + OSWORKFLOW设计器】是一个结合了三个关键技术的集成解决方案,用于在Liferay门户平台上构建和管理工作流。Liferay是一个开源的企业级门户平台,提供了一整套内容管理系统、社交协作...

    基于Java Web Start技术的电网培训考核系统.pdf

    【Java Web Start技术详解】 Java Web Start(JWS)是Oracle公司开发的一种技术,它允许用户通过Web浏览器启动和运行Java应用程序,无需安装过程。这项技术解决了传统客户端软件部署的繁琐问题,使得用户只需点击一...

    Using Java Web Start with Oracle E-Business Suite (Doc ID 2188898.1)

    ### 使用Java Web Start与Oracle E-Business Suite #### 一、关于Java Web Start ##### 1.1 什么是Java Web Start? Java Web Start提供了一种浏览器独立架构,用于将基于Java技术的应用程序部署到客户端桌面。...

    JWS java web start

    Java Web Start(JWS)是SUN公司推出的一项技术,用于通过Web来部署和发布Java应用程序。这项技术在Java 1.4版本中被引入,它会在安装时自动安装,但在1.4之后的版本中,你需要手动找到安装路径下的`javaws.exe`来...

    基于Java Web Start技术的VFP考试系统的设计与实现.pdf

    "基于Java Web Start技术的VFP考试系统的设计与实现" 这篇文章主要介绍了基于Java Web Start技术的VFP考试系统的设计与实现。该系统应用了Java Web Start技术,包括考试、教师、教务三大模块,使得考试系统更加灵活...

    基于JAVA WEB START的污染源在线监测系统研究.pdf

    "基于JAVA WEB START的污染源在线监测系统研究" 本文主要研究基于JAVA WEB START的污染源在线监测系统,通过分析JAVA WEB START的特点,阐明其在污染源在线监测系统中的应用。 一、JAVA WEB START技术 JAVA WEB ...

    创建与部署Java Web Start的步骤

    (1)本资源为Head First Java(第二版)的第17章chap17(本章在官网资源代码中没有这个代码,且书中描述模糊)为初学者打开门窗; (2)本资源根据书中例子,查询网上资料,自己总结,验证过可行,若不可行看自己搭建...

Global site tag (gtag.js) - Google Analytics