分享
 
 
 

[学习笔记]Java Web Start

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

*******************************************************

作者:陈刚,程序员,广西省桂林人,广西师范大学数学系97届毕业。

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

Email:glchengang@yeah.net

*******************************************************

谁可以提供一个稍微大一些的FTP空间,有些文章的源代码无处可放

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实现关键问题(二)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有