我爱电脑技术论坛's Archiver

star2008 发表于 2008-4-14 07:35

J2SE综合技术:使用Java网络启动部署软件

Java网络启动(Java Web Start (JWS) )可以实现在网络浏览器中运行具备全部特色的Java应用软件。Sun公司在2001年三月发布的Java1.0就已经具备了对JWS的支持,自从J2SE1.4版本以来,JWS就已经成为Java运行时环境(Java Runtime Environment (JRE) )的默认配置,不必再单独安装了,在这篇文章中,我将向您介绍这一重要技术。 _yVEl
4hM2?o5b%B&w4Sw:e
?F;Fhei8e-q9\P
技术 &}.d5I}Q

4Nm DzTN
Dz3znR\Q JWS是与网络浏览器相结合的应用软件,当用户点击链接的时候就会指向一个Java网络启动协议(Java Network Launching Protocol (JNLP) )文件,然后浏览器自动启动JWS,接着下载、缓存并运行基于Java技术的应用软件。 'c/w&ld.[dS8w

N R@ H s^t`:E g.\(BFGwa
在JWS背后的技术是JNLP及其API,它们是在Java团体进程(Java Community Process)中开发的。JWS实际上是JNLP规范的一个参考实现,JNLP技术定义了一个标准的文件格式,该格式描述了如何调用一个JNLP文件。 4WvX,[ vM+N

w Q,Q|c9YC,w3] RRZ-cS9c UD c}
既然安装链接可以作为普通的HTTP URL的链接,那么您就可以通过网页来检查客户端是否安装了JWS,您可以在IE中通过以下代码来检查:
Z BfU%\-E/{
5|;aff+N'C8m-N(y
cc&K.f#i~ < SCRIPT LANGUAGE="VBScript">
k^ b&`wo
3Px"kJ(_UoJ4\
/Z:d~Pvs _O on error resume next
_GKO(ebNa %iE#g$E b#j(]

4tzNv,zb {6`'EI If isIE = "true" Then j Q0Xv9Tq
,ti OQC8X
i? x!X)A t7@;X"}
If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then
U$av;R d.VB"a p}A
bI ^ P${FF 0izVw0h
javawsInstalled = 0 -x\vP+TOJ

~O8mS6}if7Q
%O4Q)\,nrp#W? Else %xSnt7J-@p5H;W
k7E+?i"`9` koN a4^g
EU7`-TTa"{(F1\0a
javawsInstalled = 1
f)Hs6NG~g$~~g\ 5y;J!b)X0WwR0eB7e

Y d-Qn@8B End If 5X)H%~8h$Q.]9}

f5t-]uc&n ?q
(LCr7@8Kx$x If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then
;QB+X%X:yIgd1y ~NF#CC%o5p

;~2C%N? Wj y;|nB+b javaws142Installed = 0
'~~upx5d8e]
g7PaX)b L:|ZS
P4|k9Yc0yc Else
.lm'IDTu5w p j'I$iBx%R
Qy.k;vjC2l P
javaws142Installed = 1 #hP:{^+B3u
Po+R0C L*FJZ

%yy'Jvf Y&Z End If m/ub%Q%VKo'I#CTX
s]){r8m A
&Z*r"_P~e;H7K0u
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))) Then /{#Dx7YQ5?)w
S:k R fQv

)f%gd1AVP Y7a javaws150Installed = 0
^a)m4U,r"d)@T I
6H;I/q%uhHHc a}i6A%a-|~EW2E
Else
*o8k6L3w8Y{T ,O'~ GWp S'ipdI\
"Nw"^-HJ+HX4}ec
javaws150Installed = 1 t!U,Hyb{-R1|

g ZT4se3J.e c
` Fwx![ aFT End If X&O5^~yY

%Z dWn k
V\!c;AV/OWiE End If q"I3XQT`jFw

'g'U:p+Q_ t&E
k];j _,x_.~+C;P2N_ < /SCRIPT> 4jl-S"ne.B6m

Q nxWA$\
oSbGC8dJ 开发 -o#AO2A[oT,C b
f'yj-w#in#S7W

m%[dhD/C4g6F 开发部署在JWS上的软件和开发独立运行的软件在Java 2平台上是基本相同的,比如,程序的起点都是以下的标准代码:
-t\4l H7}S+[#S j/T? ;V:s3^W N/K2O2GP
wU}#e L#Z
public static void main(String[] argv) !rjx-p yx9E
hAy8nyAy)Q ^
kw#eL |5s
然而,为了支持网络部署,也就是实现自动下载和调用软件,并且保证软件在一个安全的沙盒中运行,还需要一些额外的考虑,包括: !yQ b-Kr[l&Vw u
AJxh P:m ?

m8{T3P!M&k:N 应用软件必需作为JAR文件集合来使用;
s?pL_J_)It2MUQ z+a X(WTyF1B4T-G,F
所有的应用软件资源,比如文件、图片都必需存储在JAR文件中,而且它们都必需使用Java 2平台的getResource机制来引用; )g [Fy.q-W

#pV-iU7E5Bd 应用软件可以使用System.exit调用; eMUx;doX{vV
.VX p_"RF3K
进行不受限制地访问系统的软件需要通过签名的JAR文件来使用,而且JAR文件中所有的项目都必需经过签名; 4K4N7D d| DdE

r:i#O%D EwG4U4P 如果软件要运行在一个安全沙盒中,那么它必需遵循以下的限制; PI {7FL!qL/[7Y8rM

m5Zu/iMF n 不能进行本地磁盘访问;
I~;BV ZL(RX2p cD!Z`%ew@$jLRl
所有的JAR文件都必须从同一个主机下载; 8P-T C Jt"H-o {Z

hKZ7PX5_{i 只能和下载JAR文件的主机之间建立网络连接;
T3h)N"{:`Ei4O I+Z3X
xO ~/OLa%VR ^ 不能安装安全管理器;
I-}3\:?,iE1cW]
Gn2L#l%V[-Y 不能使用本地类库;
$j|-O(Y0\ A &a rOU S
对系统属性的访问受到限制,对于JNLP中定义了的系统属性,应用软件可以进行读/写操作,并且对于相同的属性集合具备和applet一样的只读权限。 -i{"iS6^af;rJ

&S/M0g Z4o 4_%i/Vv:z{
安全 A"Z;T7m&NHjp@

z-qbH8Kp d7oUAYX%I
JWS是构建于Java 2平台之上的,Java 2平台提供了一个全面的安全架构,在Java 6.0版中,JWS则提供了更加强大的安全特色,比如代码签名。
ijv;pN
A6NtEk+J3`;R
/l_'F \/adk 在默认状态下,通过JWS调用的应用软件将运行在一个受到限制的环境中(一个“沙盒”),它们对本地计算资源的访问,比如存储设备和本地网络,是有限的。这样,JWS就保证了下载的潜在的不可信任的软件不会危及到本地文件或网络。
0yP;Mf/De'U'~t%A
7b7h4`$vV3Uey d
4as[]7k0Xs 当然,应用程序也可以请求不受限制的本地系统访问,在这种情况下,当该软件第一次调用时,JWS将显示安全警告对话框,安全警告的内容包含软件开发者的信息。
)Q0C$[}1M
k9C l9T\0F :Wk k|*HS(P!jv6c8p {b
如果一个应用软件包含了一个或多个经过签名的JAR文件,JWS将会验证这些JAR文件在签名后是否发生过变化,如果数字签名的认证失败,那么JWS就不会运行该软件,因为它们已经被第三方修改过了。通过在JNLP文件中添加以下的设置,一个应用软件可以请求完整的权限。
$Lh _-e^ DdT &E7p ]"AQ5L*C%L C

"od%yC7Q4[t < security> 'R kH O;~D3Q+M(em
"tM {'@7ly
l3sxG,f
< all-permissions/>
$O)vAY@d,C]{ Y 4E bN3b/s3w1O7[8} ?
+s*a&aZ6V-Phlufa
< /security> 0MG"o4X?o
?z3Qo*`"[e4q
,G'i"Ab]'cjt zR
JNLP文件 HV ?*E&t,K
9u{ S_cZIf z2r.U

l:v{f!yN+n JNLP是一个和JWS紧密相关的概念,它经常可以和术语“网络启动”相互替代使用,实际上,JNLP是一个规定了JWS应用软件如何启动的协议。JNLP中的包含了诸如JAR包文件的位置、应用软件主要类的名称,以及程序的其它一些参数。在适当配置的浏览器中,JNLP文件是传递给JRE的,然后JRE将会下载应用软件到用户的机器上并开始执行。
~[*S3H1q K!^ J \%Axb

;HR.KYGI%v:x2n Z 一个JNLP文件不包含任何二进制数据,实际上它包含的URL指向所有的二进制数据和二进制代码资源。这些文件还可以指向其他的JNLP文件,它们被称为扩展描述符,一个扩展描述符通常描述了运行软件所必需的组件,在扩展描述符中描述的资源将会成为应用软件类路径的一部分,这样,常用的功能只需要描述一次即可,以下的例子是一个常见的JNLP文件: sT_)n!M|
K#[$CA:c
l]8Nh9V#^6W
< ?xml version="1.0" encoding="UTF-8"?>
(I:[%k'|*N/T!M 3k.R0f8l6Y4V7U

.dD6X2|$e#n3PNY o5B < jnlpcodebase="http://www.helloworld.com/hw_app"> }DDn e;J.Cy7GC

8PoM3u3@
^6d `{cq7\o.L\p < information> vJ;gBzv

l'?*iUs n_;n#z
8E3uKHD)f/@ < title>Hello world!< /title>
6l(}2F0qRMg!^:Y,u
Sv~VU)H ;oz4D4b-Ve T
< vendor>My Web Company< /vendor>
oVH4DbM`7s4G
yX6lt8d *T3?Q K5wT+s6J
< icon href="hello.jpg"/> D7e KhKnXAf

o5\*V3[3PY'V+Zz
Cc rW&I6\/cQb < offline-allowed/> ]5D6b0}2xGp
f#]"`fO"f,O:NW

2\0Z0mr%e[,wO < /information>
Y4^] w!nzrP
@PP/o\nZ~ E wl7L8xEA
< resources>
2u$q.Cl&d /Ux#]5x9t7v&K

iZ-[;q i2H2ZyP < j2se version="1.3+"/> p+^!o\Yf1z
+c'L Eu1|$A
*`TH x\*T|
< jar href="hw.jar"/> U4mP'`N2G!_ V
A&W]2|9E8J

*} {j^'}y < /resources> %X5_`V/w'D,k\_ vN

Q`EkB;Xf"j7g n f%_'o3Fm H+Zz
< application-desc main-class="com.helloworld.Hello"/> M u7C(CMf i0JUt

OI^&U%|'q2}xCP
E-_"C)\1m(S < /jnlp>
a?&KB6Vo L@
$`X a+Q*F\os FN6tz3G
这个JNLP文件描述了如何调用名为Hello的程序,在JNLP文件中指定了需要1.3或更高版本的Java来运行该程序,同时还有一些与程序相关的信息,这些信息都会在用户下载的过程中显示。
etDi"R)V8KO
Y-ILDN
@IK/\:G9E 如果您希望了解更详细的JNLP协议和文件格式,可以参考这个官方规范。 1j#B1HDU

-l:K Lk0ZE 6VS'i3awk
结论 )I'Q~:wi

G*IJ+y0G u9}4|
O]*Z\/]L/lt JWS提供了一种与平台无关的、安全的而且强大的部署技术,开发者只需要将应用软件部署在网络服务器上就可以为最终用户提供全部的功能,而最终用户也只需要使用网络浏览器就可以运行所需的应用软件,而且永远是最新的版本。
[O6bq$o 1qH)AzZ6h |

u+po3LnP#JM0s JWS的一个主要优点是它克服了Java插件和不同Java虚拟机的兼容性问题,但是,使用网络启动的程序却不能像applet一样简单地和浏览器进行通讯。

页: [1]
   

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.