- <%@page contentType="text/html;charset=gb2312"%>
- <html>
- <title>JWS Test</title>
- <head>
- <SCRIPT LANGUAGE="Javascript">
- function insertLink(url, name) {
- document.write("<a href=" + url + ">" + name + "</a><br><br>");
- }
- insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
- </SCRIPT>
- </head>
- <body>
- </body>
- </html>
<%@page contentType="text/html;charset=gb2312"%> <html> <title>JWS Test</title> <head> <SCRIPT LANGUAGE="Javascript"> function insertLink(url, name) { document.write("<a href=" + url + ">" + name + "</a><br><br>"); } insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest "); </SCRIPT> </head> <body> </body> </html>
在jsp中添加检测访问的客户端是否已经安装了JWS的客户端的代码,示例如下:
- <html>
- <title> JWS Test </title>
- <head>
- <SCRIPT LANGUAGE="Javascript">
- var javawsInstalled = 0;
- isIE = "false";
- if (navigator.mimeTypes && navigator.mimeTypes.length) {
- x = navigator.mimeTypes['application/x-java-jnlp-file'];
- if (x) javawsInstalled = 1;
- } else {
- isIE = "true";
- }
- function insertLink(url, name) {
- if (javawsInstalled) {
- document.write("<a href=" + url + ">" + name + "</a><br><br>");
- } else {
- document.write("<a href=" + url + ">"+ name +"</a><br><br>");
- }
- }
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- on error resume next
- If isIE = "true" Then
- If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then
- javawsInstalled = 0
- Else
- javawsInstalled = 1
- End If
- End If
- </SCRIPT>
- <SCRIPT LANGUAGE="Javascript">
- if(javawsInstalled){
- insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
- }else{
- //通知用户要先安装JWS的客户端,你可以自己提供下载或是直接链接到Sun的JWS下载。
- //分为两种,如果客户端已经安装了Java运行环境,则只要下载javaws-1_0_1_01-win-int.exe即可。
- //如果客户端没有安装Java运行环境,则要下载完整的javaws-1_0_1_01-win-int-rt.exe。
- }
- </SCRIPT>
- </head>
- <body>
- </body>
- </html>
<%@page contentType="text/html;charset=gb2312"%> <html> <title> JWS Test </title> <head> <SCRIPT LANGUAGE="Javascript"> var javawsInstalled = 0; isIE = "false"; if (navigator.mimeTypes && navigator.mimeTypes.length) { x = navigator.mimeTypes['application/x-java-jnlp-file']; if (x) javawsInstalled = 1; } else { isIE = "true"; } function insertLink(url, name) { if (javawsInstalled) { document.write("<a href=" + url + ">" + name + "</a><br><br>"); } else { document.write("<a href=" + url + ">"+ name +"</a><br><br>"); } } </SCRIPT> <SCRIPT LANGUAGE="VBScript"> on error resume next If isIE = "true" Then If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then javawsInstalled = 0 Else javawsInstalled = 1 End If End If </SCRIPT> <SCRIPT LANGUAGE="Javascript"> if(javawsInstalled){ insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest "); }else{ //通知用户要先安装JWS的客户端,你可以自己提供下载或是直接链接到Sun的JWS下载。 //分为两种,如果客户端已经安装了Java运行环境,则只要下载javaws-1_0_1_01-win-int.exe即可。 //如果客户端没有安装Java运行环境,则要下载完整的javaws-1_0_1_01-win-int-rt.exe。 } </SCRIPT> </head> <body> </body> </html>
五.JNLP文件
Java Network Launching Protocol (JNLP,java网络加载协议)
JNLP是JWS的核心配置文件,有了它,才能将以上各部分联系起来,真正让JWS运转起来。JNLP文件符合标准的XML语法,实质就是一个XML文件。当然,编写它的最好方式是对已写好的JNLP进行改写。JWSTest.jnlp示例如下:
- <?xml version="1.0" encoding="utf-8"?>
- <!-- JNLP File for SwingSet2 Demo Application -->
- <jnlp
- spec="1.0+"
- codebase="http://你的IP:8080/JWSTest/apps"
- href=" JWSTest.jnlp">
- <information>
- <title> JWS Test </title>
- <vendor>YOUR Name</vendor>
- <homepage href=" JWSTest.html"/>
- <description> JWS Test </description>
- <icon href="images/ JWSTest.jpg"/>
- <offline-allowed/>
- </information>
- <security>
- <all-permissions/>
- </security>
- <resources>
- <j2se version="1.3"/>
- <jar href="lib/ JWSTest.jar"/>
- </resources>
- <application-desc main-class="运行启动的主类"/>
- </jnlp>
<?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for SwingSet2 Demo Application --> <jnlp spec="1.0+" codebase="http://你的IP:8080/JWSTest/apps" href=" JWSTest.jnlp"> <information> <title> JWS Test </title> <vendor>YOUR Name</vendor> <homepage href=" JWSTest.html"/> <description> JWS Test </description> <icon href="images/ JWSTest.jpg"/> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.3"/> <jar href="lib/ JWSTest.jar"/> </resources> <application-desc main-class="运行启动的主类"/> </jnlp>
部分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>。
至此,你已经完全构建了运转JWS的各部件。
六.完整发布和测试
前面已经准备好了需发布的应用程序的jar包,也写好了用来访问的jsp文件和服务器端的核心jnlp文件。
第一步:在JWSTest下新建目录jsp。把index.jsp拷入jsp目录。
第二步:把jnlp文件直接拷入apps目录下。
第三步:在浏览器里输入:http://localhost:8080/JWSTest/jsp/index.jsp 即可访问到jsp页面。页面应出现JWSTest字样。
第四步:点击JWSTest,连接到apps下的JWSTest.jnlp文件,JWS启动,开始下载你发布的应用程序。
第五步:下载完毕,直接运行即可。以后,你也可以直接运行JWS客户端里已下载的应用程序。
七. 常见问题
长期使用JWS还可能遇到一些问题,在这里列出几个经常出现的问题,并给出相应解决方法:
问题一:JWS不能运行,JNLP文件像普通XML文件一样显示在Browser里
解决办法:请修改tomcat里,发布程序的路径中的web.xml。
在其中添加<mime-type>
application/x-java-jnlp-file
</mime-type>
以支持JNLP文件。
问题二:不能下载资源或下载资源失败
解决办法:请卸载JWS的客户端,并将注册表里有关JWS的项目都删除,并确保program Files下的JWS目录已被删除,然后,重装JWS。
问题三:下载资源中有未签名文件
解决办法:
1:确保所有的jar包及其他资源都进行过签名。
2:确保整个资源中,没有中文的命名。好像签名工具不支持中文命名的文件名,所以未签到名。
3:察看已经签名的jar包中,meta-inf路径下的jwstest.sf(jwstest是你在进行签名时-alias后的命名)文件,他详细的列出了所有已签名的文件,以分析签名失败的原因。
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
[Unknown]: Chen
您的组织单位名称是什么?
[Unknown]: RongWare
您的组织名称是什么?
[Unknown]: RW
您所在的城市或区域名称是什么?
[Unknown]: HangZhou
您所在的州或省份名称是什么?
[Unknown]: ZheJian
该单位的两字母国家代码是什么
[Unknown]: CN
CN=Chen, OU=RongWare, O=RW, L=HangZhou, ST=ZheJian, C=CN 正确吗?
[否]: Y
输入<jwsmytest>的主密码
(如果和 keystore 密码相同,按回车):
再次输入新密码:
C:\a>keytool -list -keystore mykey
输入keystore密码:
Keystore 类型: JKS
Keystore 提供者: SUN
您的 keystore 包含 1 输入
jwsmytest, 2009-11-27, PrivateKeyEnt
认证指纹 (MD5): A8:58:00:19:A8:D6:D7:93:1B:8A:CA:32:C4:F4:18:76
C:\a>jarsigner -keystore mykey s.jar jwsmytest
输入密钥库的口令短语:
输入 jwsmytest 的密钥口令:
警告:
签名者证书将在六个月内过期。
C:\a>