本篇文章适合对Java Web Start和JNLP具有初步认识的读者。作者zeroBlack在前期做了大量资料搜集和学习,将以JNLP启动的运行过程为主线,介绍JNLP启动的相关配置和应用的其他技术。其中涉及的php相关内容可以在W3C School中找到详细解释。关于Lighttpd服务器的配置相关,可以在安装服务后查看自带的lighttpd.conf文件,内含配置示例。如果大家有进一步需要,请回复提出,zeroBlack会补充相应解释或代码。
一、浏览器向服务器发送请求返回页面
用户浏览器地址栏输入Java程序所在服务器IP,请求发送至服务器中的Web服务(zeroBlack的Web服务采用Lighttpd)。此时的Lighttpd已经配置好了Web服务的主目录和起始页,主目录中存放了Java应用相关的所有jar文件和Web请求的相关页面(包括起始页)。收到客户浏览器端的请求后,根据Lighttpd配置文件中的配置,首先定位到主目录,然后返回起始页(zeroBlack的起始页为index.php)。
二、index.php跳转至JNLP文件生成页面
Lighttpd服务器返回的index.php页面无实际内容,只扮演了类似指针的角色,页面直接跳转到JNLP文件的生成页面(zeroBlack的页面叫做Client.php),Client.php的内容严格遵循php脚本格式,全部内容包裹在<?php ?>内部。首先是一连串header()函数,控制文件的过期时间、最后修改时间、缓存以及返回类型等。这里需要特别注意的是返回类型的控制为header("Content-Type: application/x-java-jnlp-file");表示页面返回给浏览器的内容为JNLP文件,针对这一返回类型需要在Lighttpd服务器配置文件中添加相应的MIME Type配置语句。
三、Client.php的具体内容和执行过程
Client.php脚本header()函数以下的代码都做了些什么?我们一起来看一下。(1)采用php自带的函数根据服务器名获取服务器IP地址,获取应用端口号(2)将jnlp文件的全部内容以字符串的形式赋给jnlp变量,文件内容中的Server和Port分别对应前面获得的值(3)判断主目录中是否存在jnlp文件(zeroBlack的文件叫做Client.jnlp),如果Client.jnlp存在,则删去(4)创建Client.jnlp文件,将指针指向文件起始位置,写入字符串jnlp至文件中(5)关闭文件
四、浏览器下载jnlp文件,Java应用启动
Client.php返回到浏览器的为jnlp文件类型的数据,浏览器将自动弹出下载界面,此时可根据不同浏览器的弹出界面,选择下载或直接打开。若选择下载,则需要双击后缀为.jnlp的文件以JNLP方式启动服务器存放的Java应用。若选择直接打开,则下载完成后自动启动Java应用。
五、根据jnlp文件的配置加载jar文件
用户通过Java Web Start启动Client.jnlp后,JWS根据jClient.nlp文件中的配置,找到服务器及应用端口,并加载主目录下的Java应用的相关jar文件,找到程序主函数,开始运行Java程序。
至此,一个完整的JNLP启动Java应用的运行过程进行完毕。