Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 424|回复: 0

[Java基础知识]轻松玩转JavaWebStart

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 02:50:11 | 显示全部楼层 |阅读模式
    Java Web Start(以下简称JWS)是SUN提供的一种通过Web来部署和发布java 程序的新技术,它既可以用来发布Application,也可以用来发布Applet,它获去年全球Java技术最佳创意奖。它仅在第一次运行时下载程序,以后的事情,就全全交给JWS,包括版本的自动更新和维护。这是我们曾经梦寐以求的事情,程序运行在客户端(本地运行,当然有足够的速度),但不用去安装配置客户端,也不用去考虑版本升级后对客户端的维护,这就是JWS提供给我们的好处之一。OK,下面我们就来看看如何玩转JWS,本文仅用发布Application来做说明。
    系统环境:Win2000Professional+Tomcat3.2.1+JDK1.3。

      

      
      
       
       
       

       
      一:JWS简介
        JWS主要用来通过网络部署你的应用程序,它具有安全、稳定、易维护、易使用的特点。用户访问用JWS部署应用程序的站点,下载发布的应用程序,既可以在线运行,也可以通过JWS的客户端离线运行已下载的应用程序。对同一个应用程序,在第一次运行时下载,以后每次运行时,JWS的客户端会自动去探测是否有版本更新,有更新就自动下载新版本,没有更新就直接运行本地当前版本,所有的麻烦全由JWS去承担。好,下面我们就一步一步来搭建JWS

    二:搭建支持JWS的Web站点
    第一步:你的Tomcat3.2.1已经正常运转

    第二步:找到TomcatHOME/conf下的web.xml文件,在其中添加
    <mime-type>
       application/x-java-jnlp-file
    </mime-type>
    以支持JNLP文件。
    站长注:Tomcat5此步骤可以省略。
      
      
      
    三:部署应用程序
    第一步:开发你希望发布的应用程序

    第二步:把应用程序及所用到的所有资源打成一个或多个jar包

    第三步:如果你的应用程序不会用到任何运行这个应用程序的机器的本地资源,那么,你的应用程序就可以部署了。

    第四步:如果你的应用程序用到了运行这个应用程序的机器的本地资源,那么,你的应用程序就必须先签名然后才可以发布。

    第五步:如何给应用程序签名

    1:首先确保你已经完全安装了Java2的环境,有keytool工具,它位于J2SE SDk的bin目录下。这一般不会有问题。

    2:到Dos状态下,进入你需发布应用程序的jar包所在的目录,运行下面这句话
    keytool -genkey -keystore myKeystore -alias jwstest

    它将会提示你输入用户名、密码等,不用理它,按照提示随便输入即可,但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore的文件。

    3:如果你想察看一下刚才生成的myKeystore文件的内容,可以使用下面这句话:
    keytool -list -keystore myKeystore

    显示出来应该类似如下:

    Keystore type: jks
    Keystore provider: SUN

    Your keystore contains 1 entry:

    jwstest, Tue Nov 23 19:29:32 PST 2001, keyEntry,
    Certificate fingerprint (Test):
    C3:A9:CD:F3:D3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C

    4:对你需发布应用程序的jar包进行签名,运行下面这句话:
    jarsigner -keystore myKeystore yourtest.jar jwstest

    其中yourtest.jar是你的jar包名,你需要修改它,别的就不必修改了。运行时会提示你输入密码,就是你刚才在生成myKeystore文件时设定的密码。

    第六步:部署应用程序的jar包。

    1:在Tomcat的webapps中新建目录JWSTest

    2:在JWSTest下新建目录apps,META-INF,WEB-INF

    3:在apps下新建目录images和lib

    4:在META-INF中拷入MANIFEST.MF

    5:在WEB-INF中拷入web.xml

    6:把已经准备好的jar包拷入lib目录下

    四:Jsp页面
    第一步:编写用于Web访问的页面index.jsp如下:

    <%@page contentType="text/HTML;charset=gb2312"%>
    <html>
    <title>JWS Test</title>
    <head>
    <SCRIPT LANGUAGE="Javascript">
         function insertLink(url, name) {
             document.write("<a href=" + url + ">"  + name + "</a><br><br>");
         }

         insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
    </SCRIPT>
    </head>
    <body>
    </body>
    </html>

    第二步:在jsp中添加检测访问的客户端是否已经安装了JWS的客户端的代码,示例如下:index.jsp

    <%@page contentType="text/html;charset=gb2312"%>
    <html>
    <title> JWS Test </title>
    <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) {
                 document.write("<a href=" + url + ">"  + name + "</a><br><br>");
              } else {
                 document.write("<a href=" + url + ">"+ name +"</a><br><br>");
              }
           }

    </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>
    <SCRIPT LANGUAGE="Javascript">
         if(javawsInstalled){
          insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
         }else{
    //通知用户要先安装JWS的客户端,你可以自己提供下载或是直接链接到Sun的JWS下载。
    //分为两种,如果客户端已经安装了Java运行环境,则只要下载javaws-1_0_1_01-win-int.exe即可。
    //如果客户端没有安装Java运行环境,则要下载完整的javaws-1_0_1_01-win-int-rt.exe。
         }
    </SCRIPT>
    </head>
    <body>
    </body>
    </html>

    五:JNLP文件
    第一步:下面我们来编写JWS的核心配置文件JNLP,有了它,才能将以上各部分联系起来,真正让JWS运转起来。JNLP文件符合标准的XML语法,实质就是一个XML文件。当然,编写它的最好方式是对已写好的JNLP进行改写。JWSTest.jnlp示例如下:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- JNLP File for SwingSet2 Demo Application -->
    <jnlp
       spec="1.0+"
       codebase="http://你的IP:8080/JWSTest/apps"
       href=" JWSTest.jnlp">
       <information>
         <title> JWS Test </title>
         <vendor>YOUR Name</vendor>
         <homepage href="JWSTest.html"/>
         <description> JWS Test </description>
         <icon href="images/JWSTest.jpg"/>
         <offline-allowed/>
       </information>
       <security>
        <all-permissions/>
       </security>
       <resources>
         <j2se version="1.3"/>
         <jar href="lib/JWSTest.jar"/>
       </resources>
       <application-desc main-class="运行启动的主类"/>
    </jnlp>


    第二步:部分JNLP的关键语法

    <jnlp>元素
    spec:必须是1.0及以上版本,这里用1.0+,不需修改。
    codebase:资源的URL,是JNLP指向各连接的起始处,需自行修改。
    Href:JNLP文件相对codebase的存放位置,和JNLP文件的全名,需自行修改。

    <infomation>元素

    Title:发布的应用程序简单标题,需自行修改。
    Vendor:发行商信息,可以写上你的大名,需自行修改。
    Homepage:存放有关应用程序的相关文档的URL,如help文件等,可有可无。
    Description:对应用程序的描述,可以有多对<description></description>,可有可无。
    Icon:用户下载你的应用程序后,在JWS里显示的图标的URL,应是gif或jpeg格式。需自行修改。
    Offline-allowed:选择项,允许用户离线运行应用程序,一般都会有,不用修改。

    <security>元素
    选择项,如果没有指明<security>,默认是不允许应用程序访问用户的本地资源,即应用程序是沙箱运行。
    如果设定为<all-permissions/>,则表示允许应用程序访问用户的本地资源。一般都会设定此值。
    站长注:此项省略时,不允许应用程序访问用户的本地资源,不用对jar文件签名

    <resource>元素
    <j2se version = 指定jdk版本>
    <jar href = 指定需发布的应用程序的jar包存放的位置>
    <application-desc>元素
    main-class:应用程序运行启动的主类

    <argument>:应用程序运行时的参数,可以有多个,每一个参数用一对<argument>参数</argument>。

    至此,你已经完全构建了运转JWS的各部件。

    六:完整发布和测试
    前面我们已经准备好了需发布的应用程序的jar包,也写好了用来访问的jsp文件和服务器端的核心jnlp文件。

    第一步:在JWSTest下新建目录jsp。把index.jsp拷入jsp目录。

    第二步:把jnlp文件直接拷入apps目录下。

    第三步:在浏览器里输入:http://localhost:8080/JWSTest/jsp/index.jsp 即可访问到jsp页面。页面应出现JWSTest字样。

    第四步:点击JWSTest,连接到apps下的JWSTest.jnlp文件,JWS启动,开始下载你发布的应用程序。

    第五步:下载完毕,直接运行即可。以后,你也可以直接运行JWS客户端里已下载的应用程序。

    不出意外,应恭喜你已经开始享受JWS带来的乐趣了。

    七:常见问题
    通过上面的讲述,你一定能体会到JWS的易用性。或许事情并没有那么简单,以我的使用经验,还会有许多问题出现,在这里挑几个经常出现的问题,给出相应解决方法,让大家少走弯路,而享受更多的乐趣。

    问题一:JWS不能运行,JNLP文件像普通XML文件一样显示在Browser里

    解决办法:请修改tomcat里,发布程序的路径中的web.xml。

    在其中添加<mime-type>
    application/x-java-jnlp-file
    </mime-type>
    以支持JNLP文件。

    问题二:不能下载资源或下载资源失败

    解决办法:请卸载JWS的客户端,并将注册表里有关JWS的项目都删除,并确保program Files下的Java Web Start目录已被删除,然后,重装JWS。

    问题三:下载资源中有未签名文件

    解决办法:1:确保所有的jar包及其他资源都进行过签名。

    2:确保整个资源中,没有中文的命名。好像签名工具不支持中文命名的文件名,所以未签到名。这可让我郁闷了一下午哦。

    3:察看已经签名的jar包中,meta-inf路径下的jwstest.sf(jwstest是你在进行签名时-alias后的命名)文件,他详细的列出了所有已签名的文件,以分析签名失败的原因。

    有关参考 详见 http://java.sun.com/products/javawebstart/

    关于作者  
    陈臣,就职于中关村某软件公司,软件工程师,scjp, 您可通过 chch1979@263.net 与他联系。  

      

      
      
       
       

         
       

         
       
      



    源码下载:http://file.javaxxz.com/2014/10/1/025010484.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-28 16:36 , Processed in 0.435825 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表