java

位置:IT落伍者 >> java >> 浏览文章

Java web start入门


发布日期:2022年06月30日
 
Java web start入门

下面是用最简单的HelloWorld方法实现一个Java Web Start的例子工程webstart目录结构如下

目录说明如下

images 存放*jnlp文件中定义的图标文件

jar 存放classes打包后的jar文件

jnlp 存放*jnlp描述文件

src java源码

WEBINF/classes java编译后的class文件

webatart 建立步骤如下

.在webstart/src/jws下新建一HelloWorldjava文件

package jws;

import javaxswing*;

public class HelloWorld {

private JFrame jFrame;

private JPanel jPanel;

private JLabel label;

public HelloWorld(){

jFrame = new JFrame(HelloWorld Test Frame);

label = new JLabel(Hello world!);

jPanel = new JPanel();

jPaneladd(label);

jFrameadd(jPanel);

jFramepack();

jFramesetSize( );

jFramesetLocation( );

jFramesetVisible(true);

jFramesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

// webstart 启动时执行的主方法

public static void main(String args[]){

new HelloWorld();

}

}

在main方法中完全可以不用写new HelloWorld();而只在main方法中输出一条测试语句

Systemoutprintln(This is test!);

进行简单测试打印结果会出现在步骤java控制台中

.编译HelloWorldjava在WEBINF/classes目录下执行命令

jar cvf helloworldjar jws/*class

执行后把生成的helloworldjar包拷贝到webstart/jar/jws目录下

(在IDEA中打包使用Jar Tool插件比较方便eclipse中可以使用Fatjar)

.从helloworldjar/METAINF中解压出MNIFESTMF更改MNIFESTMF内容

ManifestVersion:

CreatedBy: _ (Sun Microsystems Inc)

ManifestVersion:

CreatedBy: _ (Sun Microsystems Inc)

MainClass: jwsHelloWorld

然后在WEBINF/classes目录下执行命令

jar umf MANIFESTMF helloworldjar

把新的MNIFESTMF更新到helloworldjar包中

如果在下面步骤中的<applicationdesc mainclass=jwsHelloWorld/>指定了MainClass方法此步骤可以省略

.webstart/jnlp目录下新建一HelloWorldjnlp文件

<?xml version= encoding=UTF?>

<!codebase 属性指出搜索应用程序资源的顶级URL下面的icon/jar元素都是以这个URL为基本>

<jnlp codebase=>

<information>

<!开始运行菜单中输入javawsjavaws viewer启动Web Start会看到客户端已经安装的webstart应用程序>

<!title 应用程序标题 vendor供应商

title/vendor 元素必须会显示在用javaws viewer命令

打开的应用程序缓存查看器(Java Application Cache Viewer)中>

<title>HelloWorld</title>

<vendor>Lively Corporation</vendor>

<description>HelloWorld Test Example for WebStart</description>

<!homepage 存放有关应用程序的相关文档的URL如help文件等仅仅是description作用>

<homepage />

<!icon 指定图标会显示在应用程序缓存查看器中

在查看器中新建webstart快捷方式到桌面时也会显示为快捷方式图标

只支持GIF/JPEG格式其它格式无效>

<icon />

<!splash 在sun的文档中提到会出现在webstart启动时的闪屏中不过可能由于速度问题我没有观察到>

<icon kind=splash />

<! 允许离线启动可以使用javaws offline命令>

<offlineallowed/>

</information>

<resources>

<! 指定客户端需要安装的jse版本下面指定为+

如果版本是在链接此jnlp文件时会提示更新jse版本>

<jse version=+/>

<! 指定要下载到本地的jar文件(注意所有的文件都需要打包才能够下载)

可以包含一些资源文件如icons/configuration files可以使用getResource方法取得>

<jar />

</resources>

<!applicationdesc 必须指定webstart启动时执行jar文件中的哪个类>

<applicationdesc mainclass=jwsHelloWorld/>

</jnlp>

其中*jnlp文件的语法的详细信息可以在sun网站上查询

其中javaws命令行的详细参数可以在sun网站上查询

.webstart目录下建一l

内容如下

<a >HelloWorld</a>

.因为是web应用所以webstart/WEBINF建一webxml文件

内容为

<webapp>

</webapp>

即可启动tomcat时默认会去找l文件

.webstart工程放入tomcat/webapps启动tomcat即可

启动后会看到helloworld的swing弹出窗口还有如下图会有一个java控制台

如果要在HelloWorldjava中对本地文件进行操作就必须对jar文件进行签名具体步骤如下:

在HelloWorldjava的main方法中对文件进行操作

File file = new File(E: + /testtxt);

try {

Systemoutprintln(filecreateNewFile());

} catch (IOException e) {

eprintStackTrace();

}

.用keytool genkey产生一个私钥(使用keytool –help命令可查看keytool命令参数)

keytool genkey alias mykey keystore mykeystore keypass mypass storepass mykeystorepass validity

参数说明如下

alias mykey 指定密钥的别名不指定的话默认为 mykey

keystore mykeystore 指定密钥数据库名不指定则默认在Documents and Settings\Administrator下生成一个名称为 keystore的文件

keypass mypass 指定密钥密码用jarsigner签名时需要

storepass mykeystorepass 指定密钥数据库密码用jarsigner签名时需要

validity 密钥有效时间为不指定的话默认为

.在WEBINF/classes目录下运行keytool命令会提示输入一些姓名/公司/国家之类的信息

如果不想一步步输入上面信息可以直接输入下面命令执行

keytool genkey alias mykey keystore mykeystore keypass mypass storepass mykeystorepass validity dname cn=Henry Zhou ou=JavaSoft l=SZ S=JS o=Lively c=CN

dname 参数说明如下

CN=commonName

OU=organizationUnit

O=organizationName

L=localityName

S=stateName

C =country

.执行完毕在WEBINF/classes目录下生成一个名mykeystore的密钥文件下面要用此密钥文件对jar文件进行加密

jarsigner keystore mykeystore helloworldjar mykey

helloworldjar mykey 指定要签名的jar文件和密钥的别名

运行命令后会提示输入密钥密码和密钥数据库密码

签名者证书将在六个月内过期

由于安全原因在上面的命令中无法指定密钥密码和密钥数据库密码即使运行

jarsigner keystore mykeystore helloworldjar mykey keypass mypass storepass mykeystorepass

仍然会提示输入密钥密码和密钥数据库密码

其中keytool的详细参数说明可以在sun网站上查询

其中jarsigner命令行的详细参数可以在sun网站上查询

执行后在helloworldjar/METAINF中可以看到生成MYKEYDSA和MYKEYSF文件(可以通过sigFile MKSIGN指定生成 MKSIGNSFMKSIGNDSA

其中SF文件包含了JAR中所有类的一个列表保存了签名过程中使用的摘要算法DSA文件是一个二进制密匙文件扩展名是DSA还是RSA取决你使用的签名算法默认是DSA可以在keytool参数中指定RSA算法

.把生成的helloworldjar包拷贝到webstart/jar/jws目录下

.在webstart/jnlp/HelloWorldjnlp中添加

<security>

<allpermissions/>

</security>

增加了签名后如果缺少<security><allpermissions/></security>会报错

启动/运行应用程序时发生错误

标题JNLP Argument Solution

供应商Lively

类别安全错误

access denied (javaioFilePermission E:\testtxt write)

webstart 工程放入tomcat/webapps启动tomcat即可链接jnlp后发现E盘新建一testtxt文件测试成功

网上介绍有时候需要在webstart/WEBINF/webxml文件中配置

<mimemapping>

<extension>jnlp</extension>

<mimetype>application/xjavajnlpfile</mimetype>

</mimemapping>

在tomcat中测试发现不需要在webxml中添加此代码

               

上一篇:两段Java程序的效率

下一篇:Java获取窗口鼠标坐标以及键盘按键