关于WebStart工程的签字、发布

来源:互联网 发布:程序员去哪里接私活 编辑:程序博客网 时间:2024/04/29 16:08

前段时间有很多朋友向我咨询关于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做的签字,因为本地程序的原因,我调用远程的程序测试的。

原创粉丝点击