目录

远程设计器下载相关的部署

什么是 Java Web Start

Java Web Start 是一个软件技术,它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可维护性以及象 XML 和 HTML 这样的标记语言的简易性。它是基于 Java 的应用程序,允许从标准的 Web 服务器启动、部署和更新功能完全的 Java 2 客户机应用程序。在第一次启动 Java Web Start 时,用户可以从 Web 下载新的客户机应用程序;之后这些应用程序可以通过 Web 页面的链接或(Windows 中的)桌面图标或“开始”菜单初始化。应用程序在 Java Web Start 下快速初始化,被高速缓存在客户机,并且可以远程的离线启动。另外,因为 Java Web Start 是从 Java 2 技术建立起来的,所以它继承了 Java 平台的完整的安全性体系结构。

上面的解释是标准回答,不一定能理解,我们可以简单了说,java web start可以让用户在客户端自动下载润乾报表设计器,而且可以自动判断设计器是否有更新,如果更新,会自动重新下载,如果没有更新,就不需要重复下载。

其次,所有准备在客户端下载的jar包,都要符合java的安全性要求,即必须经过证书签名。

所以,从原理上讲,java web start方式远程启动设计器和c/s模式并无本质差别,其实就是c/s的运行模式,无非实现了设计器的自动下载和更新而已。

因此,这种方式的远程报表设计,主体程序都运行在客户端机器上,对客户端的机器性能有一定的要求,不会对服务器造成压力,和并发数无关。

需要下载的jar包

在进行证书制作和签名之前,我们首先要了解,润乾远程设计器需要用到哪些jar?

//设计器必须的jarpgslookandfeel.jar jbcl.jarlistview.jarlog4j_128.jarparser.jarreport4.jardefaultLicense.jar //设计器授权文件,文件名为defaultlicense.lic,//该文件单独打一个jar,方便更新servlet.jarxalan.jar//特定功能点用到的jarbarcode.jar //条形码poi2.jar //导入导出exceltransfer3.5.jar //报表从3.5迁移到4.5itext2_rq.jar //导出pdf和wordjai_codec.jar //统计图jai_core.jar //统计图 //http jdbc连接r4jdbcClient.jarr4jdbcServer.jar commons-codec-1.3.jarcommons-httpclient-3.0.jarcommons-logging.jar//jdbc包db2java.jardb2jcc.jarmysql-connector-java-3.0.17-ga-bin.jaroracle9ijdbc.jar sqlserver.jar sybasejdbc5_5.jarhsqldb.jar

上述jar包,除了设计器必须的以外,可以根据功能的需要进行取舍。选中的jar,最终都要被下载到客户端。(注意:如果需要在打开远程设计器的同时自动打开某一个报表文件,则需要下载itext2_rq.jar。)

选好需要的jar之后,请在服务器报表应用的根目录下建一个专门的目录,把这些jar全部部署到该目录下。下面,我们假设该目录名为/remoteDesigner,假设应用根目录为[report],那么该目录就是[report]/remoteDesigner

证书制作

命令步骤

keytool -genkey -keystore [report]\remoteDesigner\runqian.keystore -alias RQReport -keyalg RSA -keysize 1024 -validity 7300 //keytool是jdk自带的命令,在[jdk安装路径]/bin 目录下。//runqian.keystore是证书的文件名,自己任意取,签名时会用到//RQReport是别名,可以自己任意取,签名的时候会用到输入keystore密码: runqian //密码可以自己任意取,签名的时候会用到您的名字与姓氏是什么?[Unknown]: 北京润乾软件技术有限公司您的组织单位名称是什么?[Unknown]: 北京润乾软件技术有限公司您的组织名称是什么?[Unknown]: 北京润乾软件技术有限公司您所在的城市或区域名称是什么?[Unknown]: BJ您所在的州或省份名称是什么?[Unknown]: BJ该单位的两字母国家代码是什么[Unknown]: CNCN=北京润乾软件技术有限公司, OU=北京润乾软件技术有限公司, O=北京润乾软件技术有限公司, L=BJ, ST=BJ, C=CN 正确吗?[否]: y输入RQReport的主密码(如果和 keystore 密码相同,按回车): runqian
[注意] 注意

上述命令执行时可能会报错,这时应该检查环境变量里JAVA_HOME,PATH是否正确。为了保证一致性,建议配置成WebServer使用的JDK。

[注意] 注意

为了方便用户,[report]/remoteDesigner目录下“生成签名证书.txt”对上述命令做了同样的说明。

执行结果

上述命令执行完后,可以在[report]\remoteDesigner\目录下发现一个文件:runqian.keystore,该文件就是做好的证书。

如果重复执行上述命令,你会发现系统报错,说证书已存在。

[注意] 注意

因此初学者要注意了:如果你制作证书的过程报错,很可能该目录下已经存在一个同名的证书,重复制作会报错。

 

jar包签名

证书做好后,就可以利用证书进行签名。下面是标准的签名命令:

jarsigner -keystore runqian.keystore -storepass runqian report4.jar RQReport

其中:

  • jar包一旦发生更改,需要重新签名,例如往里增加或者更新了文件,都算更改。

  • 必须在jar包所在的目录里执行该命令,比如“[report]\remoteDesigner”

  • 一旦发生找不到命令或类的错误,一般应当检查环境变量的“JAVA_HOME”和”PATH”

jnlp文件与启动页面编写

jnlp文件的说明

jnlp是sun 规定的一种配置文件格式,他用于以web start方式启动时,配置需要下载哪些文件,哪些是必须下载,哪些是次要下载的,同时配置相关的权限、启动界面信息、启动命令等等

关于Web Start的JNLP Specification可以到sun网站 http://java.sun.com/products/javawebstart/download-spec.html下载

润乾公司提供的远程报表设计,包含了一个缺省的jnlp文件,即[report]\remoteDesigner\runqian_designer.jnlp,内容如下:

<?xml version="1.0" encoding="GBK"?><jnlp spec="0.2 1.0"codebase="http://ip:port/[report]/remoteDesigner">//下载文件存放路径,//即本章第二节说明的jar存放路径<information> //启动界面信息<title>北京润乾软件技术有限公司</title> <vendor>北京润乾软件技术有限公司</vendor><homepage href="http://www.runqian.com.cn"/><icon href="app_logo.jpg"/><offline-allowed/> </information> <resources> //下载文件定义,eager表示必须下载,lazy表示空闲时下载<j2se version="1.4.1+" href="http://java.sun.com/products/autodl/j2se"/><jar href="report4.jar" main="true" download="eager"/><jar href="alloy.jar" download="lazy"/><jar href="hsqldb.jar" download="lazy"/><jar href="jbcl.jar" download="lazy"/><jar href="listview.jar" download="lazy"/><jar href="parser.jar" download="lazy"/><jar href="rqlicense.jar" download="lazy"/><jar href="log4j_128.jar" download="lazy"/></resources><application-desc main-class="com.runqian.report4.ide.FrameMain"/> //启动的类<security> //安全控制<all-permissions/> </security> </jnlp>
[注意] 注意

href内容必须写成相对于Jnlp所在目录的相对路径,比如上面例子说明jar包和jnlp在同一目录下。

html文件的说明

以下的html文件用于远程以java web start的方式启动设计器,其内容可以自己修改,参照自己应用的页面风格。这里只列举出最关键部分的代码供参考。

<html><body><script language=javascript>var javawsInstalled = false;</script><SCRIPT language=VBScript>on error resume nextIf Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) ThenjavawsInstalled = falseElsejavawsInstalled = trueEnd If</SCRIPT><script language=javascript> //自动下载java web startif( !javawsInstalled ) {document.write( "尚未安装java web start,请点击<a href=javaws-1_0_1_02.exe>这里</a>安装" );}</script><object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" //自动下载j2recodebase="http://ip:port/[report]/remoteDesigner/j2re-1_4_1-windows-i586-i.exe#Version=1,4,1,0" width="0" height="0"><param name="archive" value="[report]/runqianReport4Applet.jar"><param name="code" value="com.runqian.report4.view.applet.HtmlPrintApplet.class"> <param name="type" value="application/x-java-applet;version=1.4"> </object><a href="http://ip:port/[report]/remoteDesigner/runqian_designer.jnlp">启动润乾报表设计器</a> //注意:这里指定的jnlp文件,就是上一小节讲解的jnlp</html></body>