关于WebStart工程的签字、发布
2005-1-29 11:53:23
前段时间有很多朋友向我咨询关于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做的签字,因为本地程序的原因,我调用远程的程序测试的。 


|