前段时间有很多朋友向我咨询关于webstart项目的发布,今天做一个整理。
以下文字绝对是原创,不经本人同一请勿转载。
假设你已经做好了自己的swing程序。
比如已经把swing程序大包成zhanglihai.jar
假设您当前使用的系统是Win32系统,并且配置好了java变量,以及安装了WebStart。
一、签字程序
首先把一下代码copy下来,在本地建立一个文件如:createKey.bat
keytool -genkey -keystore myKeystore -alias myself
keytool -selfcert -alias myself -keystore myKeystore
keytool -list -keystore myKeystore
然后执行createKey.bat文件。如下界面:
按照上面的提示输入,记住你输入的密码,本例子中的密码是12345678。
执行完,dos窗口会自动关闭,在与createKey的同一目录下生成一个文件:myKeystore
copy此文件到zhanglihai.jar目录下,然后copy以下内容建立一个文件如:signjar.bat
jarsigner -keystore myKeystore zhanglihai.jar myself
到此为止签字的准备工作已经完成。
二、为jar包进行签字
如果您的swing工程中引入了其他的jar包,应该先把引用的所有jar包解开,然后按照java的package规范整理出一个目录。
然后把zhanglihai.jar也接开,严格按照java的package规范把以上两个class文件以及目录合并在一起,然后重新打包。
我通常是这样做的,把工程所引用的所有jar包解开,按照java的package规发整理好,放到一个目录下。然后用winrar打开
zhanglihai.rar然后把目标文件导入进入。然后保存退出。如下图(我导入的是jdom包,其实没有用的class都可以不导入进去以便减少jar的Size):
如果先对zhanglihi.rar签字然后再导入所需要的jar就等于破坏了签字,我曾经尝试过用jb把所需要的jar包和我自己的程序打成一个
jar包,但是签字也失败。后来我就采用winrar的方法来处理。
接下来是对新的jar包签字了,执行signjar.bat,输入密码,本例子中的密码是 12345678。如图:
到此jar的签字结束。
三、工程的部署
WebStar工程要求有服务器端支持JNLP配置,一般的servlet引擎都支持这种类型。如果不支持,你可以在你的web.xml里面加入如下代码;
<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>
然后我们建立jnlp文件如:zhanglihai.jnlp
如下代码:
<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for SwingSet2 Demo Application -->
<!--
codebase:是以下文件的一个根URL,所有的文件都是从这个路径算起的。
以下文件中还有几个是webstart启动时候的图标以及工程标题,工程描述
-->
<jnlp
spec="1.0+"
codebase="http://localhost:9090/cnjbb/swing" href="zhanglihai.jnlp">
<information>
<title>CnJBB论坛桌面应用程序 </title>
<vendor>ZhangLiHai.Com</vendor>
<description>CnJBB论坛桌面应用程序</description>
<description kind="short">CnJBB论坛桌面应用程序</description>
<icon href="cnjbbicon.gif"/>
<icon kind="splash" href="cnjbbicon.gif"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.4+" href="http://localhost:9090/cnjbb/swing"/>
<j2se version="1.4+"/>
<jar href="zhanglihai.jar" main="true" />
</resources>
<!--
jar包中main函数的类全路径名
-->
<application-desc main-class="org.cnjbb.client.WebDesktop"/>
<!--
<applet-desc
documentBase="http://localhost:9090/cnjbb/swing/"
name="WebDesktop"
main-class="org.cnjbb.client.WebDesktop"
width="600"
height="500">
</applet-desc>
-->
</jnlp>
然后建立一个index.html文件如下:
<html>
<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 || navigator.family == 'gecko') {
document.write("<a href=" + url + ">" + name + "</a>");
} else {
document.write("<a href=http://dlres.java.sun.com/PluginBrowserCheck?pass=http://www.cnjbb.org/swing/index.html&fail=http://java.sun.com/cgi-bin/javawebstart-platform.sh>点这里下在并且安装WebStart</a> ");
}
}
</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>
</head>
<body >
<h1>欢迎使用CnJBB论坛客户端版本,如果您的机器上没有安装webstart请点下面的连接下在并安装!</h1>
<SCRIPT LANGUAGE="Javascript">
<!--
insertLink("zhanglihai.jnlp","CnJBB Swing DownLoad");
// -->
</SCRIPT>
</body>
这端脚本会自动检测机器上是否安装webstar,如果没有安装就提示安装。
启动Servlet引擎,至此webstart工程发布完毕。
询问是否启动,情选择“是”。图中的例子是我用ZhangLiHai做的签字,因为本地程序的原因,我调用远程的程序测试的。