Java Web Start简单入门步骤
编写:桂静秋
参考: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html
前言
项目需要,所以前几天研究了一下,折腾了我1.5天的时间,不能浪费,特此写出来share大家。
应用
JWS主要应用在发布应用程序上,主要写好了jnlp文件,用户通过http访问到,应用程序会自动安装在本地机器,今后升级等工作JWS将自动完成。可以说是发布软件的一种新方式。(当然,前提对方必须有jvm)
实施步骤
编写好一个测试文件,并且打成hello.jar包
此应用在点JButton 的时候测试写本地文件系统和使用本地网络资源。(编译和打包过程省略)
接着,也是我折腾了一 天的事情,如何把此jar进行证书认证,使得此应用安装到用户那可以操作本地资源。原来我使用jdk的keytool工具生成证书,但是只可用半年,后来 考虑去官方申请一个,居然要800$/年。最后考虑用openssl自己做,但是过程相当复杂,而且没法很好的控制流程,主要是对openssl命令不太 熟悉用途。折腾了一天,终于发现原来java自己就可以生成使用限期自定义的证实。哎...
生成一个新的keystore
keytool -genkey -keystore myKeystore -alias myself
生成一个私证书
keytool -selfcert -alias myself -keystore myKeystore -validity 365
注意-validity 365为证书使用期限,为1年,可以自己定义更大。
对jar进行签名
jarsigner -keystore myKeystore hello.jar myself
这样签名工作就完成了。最后写个jnlp描述文件hello.jnlp
我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。
测 试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者 公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。
同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。
参考: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html
前言
项目需要,所以前几天研究了一下,折腾了我1.5天的时间,不能浪费,特此写出来share大家。
应用
JWS主要应用在发布应用程序上,主要写好了jnlp文件,用户通过http访问到,应用程序会自动安装在本地机器,今后升级等工作JWS将自动完成。可以说是发布软件的一种新方式。(当然,前提对方必须有jvm)
实施步骤
编写好一个测试文件,并且打成hello.jar包
- //File HelloJNLP.java
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import java.net.*;
- public class HelloJNLP extends JFrame implements ActionListener {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- public HelloJNLP() {
- super ("Hello JNLP" );
- String loadedFrom = this .getClass().getClassLoader().toString();
- JLabel jl = new JLabel ("loaded by " + loadedFrom);
- JEditorPane jtp = new JEditorPane ("text/plain" , "版本1.1.2" );
- JButton bb = new JButton ("write native file" );
- getContentPane().add(jl, BorderLayout .NORTH);
- getContentPane().add(jtp, BorderLayout .CENTER);
- getContentPane().add(bb, BorderLayout .SOUTH);
- bb.addActionListener(this );
- bb.setActionCommand("wnf" );
- }
- public static void main(String [] args) {
- JFrame f = new HelloJNLP();
- f.setBounds(100, 100, 325, 250);
- f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- f.setVisible(true );
- f.addWindowListener(new WindowAdapter () {
- public void windowClosed(WindowEvent e) {
- System .out.println("Shutting down..." );
- System .exit(0);
- }
- });
- }
- public void actionPerformed(ActionEvent arg0) {
- //System.out.println(arg0.getActionCommand());
- try {
- FileOutputStream fos = new FileOutputStream ("abcfile" );
- try {
- fos.write(0xffff);
- fos.close();
- System .out.println("write file ok" );
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- Socket sock = new Socket (InetAddress .getByName("www.cctv.com" ), 80);
- sock.close();
- System .out.println("socket create ok" );
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
此应用在点JButton 的时候测试写本地文件系统和使用本地网络资源。(编译和打包过程省略)
接着,也是我折腾了一 天的事情,如何把此jar进行证书认证,使得此应用安装到用户那可以操作本地资源。原来我使用jdk的keytool工具生成证书,但是只可用半年,后来 考虑去官方申请一个,居然要800$/年。最后考虑用openssl自己做,但是过程相当复杂,而且没法很好的控制流程,主要是对openssl命令不太 熟悉用途。折腾了一天,终于发现原来java自己就可以生成使用限期自定义的证实。哎...
生成一个新的keystore
keytool -genkey -keystore myKeystore -alias myself
生成一个私证书
keytool -selfcert -alias myself -keystore myKeystore -validity 365
注意-validity 365为证书使用期限,为1年,可以自己定义更大。
对jar进行签名
jarsigner -keystore myKeystore hello.jar myself
这样签名工作就完成了。最后写个jnlp描述文件hello.jnlp
- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- file Hello.jnlp -->
- <jnlp codebase="http://192.168.1.6:81/jnlp/"
- href="http://192.168.1.6:81/jnlp/hello.jnlp" >
- <information>
- <title>Hello</title>
- <vendor>Tech Tips Sample May 2001</vendor>
- <icon href="/jnlp/qq.jpg" />
- </information>
- <resources>
- <j2se version="1.3+" />
- <jar href="/jnlp/hello.jar" />
- </resources>
- <security>
- <all-permissions>
- </security>
- <application-desc main-class ="HelloJNLP" />
- </jnlp>
我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。
测 试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者 公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。
同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。