如何Java Web Start 部署应用程序

duoshanx 2003-09-29 08:07:49
Java Web Start 部署应用程序
如题
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
duoshanx 2003-09-29
  • 打赏
  • 举报
回复
晕好长呀,谢谢中。。。。。。
yshen 2003-09-29
  • 打赏
  • 举报
回复
如何给应用程序签名

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 3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C



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

其中yourtest.jar是你的jar包名,你需要修改它,别的就不必修改了。运行时会提示你输入密码,就是你刚才在生成myKeystore文件时设定的密码。
yshen 2003-09-29
  • 打赏
  • 举报
回复

第六步:部署应用程序的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的客户端的代码,示例如下:
<%@page contentType="text/html;charset=gb2312"%>
<html>
<title> JWS Test </title>
<head>
<SCRIPT LANGUAGE="javascript">
var javawsInstalled = 0;
isIE = "false";

if (navigator.mimeTypes && navigator 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/>,则表示允许应用程序访问用户的本地资源。一般都会设定此值。

<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 与他联系。
yshen 2003-09-29
  • 打赏
  • 举报
回复
转贴ing.............

轻松玩转Java Web Start
出自:www.ibm.com.cn 陈臣 2002年09月18日 22:37
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文件。

三:部署应用程序
第一步:开发你希望发布的应用程序

第二步:把应用程序及所用到的所有资源打成一个或多个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文件时设定的密码。






duoshanx 2003-09-29
  • 打赏
  • 举报
回复
我这样做了,可是我有数据库,连不上呀!
怎么办呀!!!!!!!!!
yshen 2003-09-29
  • 打赏
  • 举报
回复
网上找了一篇东东............. hope help............

Java Web Start 是部署基于 Java TM 技术的应用程序的一种新技术。它是连接计算机和 Internet 的便捷渠道,使用户可以在 Web 上运行和管理应用程序。Java Web Start 提供简便的一点激活应用程序,并确保总是运行最新版本,以消除复杂的安装或升级过程。 ------来自Sun Java Web Start Release


我觉得jws挺简单的,基本上对于程序员来说无须额外学些什么,只要会写个jnlp的文件就可以了.
先对我的环境设置做个说明:

Tomcat4
下载地址:http://jakarta.apache.org/site/binindex.html
JavaWebStart1.0.1_02(build b03)
下载地址:http://java.sun.com/products/javawebstart
JNLP Developer's Pack
下载地址:http://java.sun.com/products/javawebstart/download-jnlp.html


以下步骤为设置运行支持jnlp的程序

1.配置一个新的Tomcat虚拟目录命名为myjnlp吧,下面建立app,images子目录.

2.写一个MyIE.java,功能是输入一个url,可以打开这个url.
程序中jnlp的部分其实很少.
源程序如下:


import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.*; import java.applet.*; import javax.swing.*;import javax.jnlp.*; public class MyIE { BasicService bs; JFrame jFrame; TextField tField; Button button; public MyIE() { jFrame = new JFrame("MyIE Browser"); tField = new TextField("http://www.google.com"); button = new Button("ä¯ÀÀ"); Container p = jFrame.getContentPane(); p.setLayout(new BorderLayout()); p.add(button,BorderLayout.EAST); p.add(tField,BorderLayout.CENTER); button.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e ) { try{ bs.showDocument(new java.net.URL(tField.getText())); //打开链接 }catch(java.net.MalformedURLException exp) { exp.printStackTrace(); } } }); jFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { jFrame.setVisible(false); System.exit(0); } }); jFrame.pack(); jFrame.setSize(400,80); jFrame.setVisible(true); try { bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService"); //查找jnlp的基本服务接口. }catch (UnavailableServiceException e) { bs = null; } catch (Exception e) { bs = null; e.printStackTrace(); } } public static void main(String args[]) { MyIE myie = new MyIE(); }}


3.写一个jnlp的文件命名为MyIE.jnlp(或者其他,但要以jnlp结尾),这是一个描述性的文件.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="http://liaoyuan:8080/myjnlp/app">
<information>
<title>MyIE</title>
<vendor>RookieSoft Corporation</vendor>
<description>MyIE just demo how to program with jnlp.</description>
<homepage href="http://liaoyuan:8080/myjnlp/app/index.html" />
<icon href="./../images/rookie.gif"/>
<icon kind="splash" href="./../images/logo.gif"/>
<offline-allowed/>
</information>
<resources>
<j2se version="1.2+"/>
<jar href="MyIE.jar"/>
</resources>
<application-desc main-class="MyIE"/>
</jnlp>保存该文件到app目录下.

4.编译MyIE.java(需要JNLP Developer's Pack中的jnlp.jar;)

5.打包产生的class文件到MyIE.jar,并把MyIE.jar保存到app目录下.

6.建立一个list.html文件,保存到app目录下.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><html> <head> <title>Remote Apps Webpage</title> </head> <body> <h1>Remote Apps Webpage</h1><ul><li><a href="MyIE.jnlp">MyIE</a></ul> <hr> <address><a href="mailto:rookieport@hotmail.com">Rookie</a></address> </body></html>

7.
1>起动你的tomcat访问list.html,点MyIE连接就可以运行了.
2>或者启动你的JavaWebStart,在其文件---->首选项菜单--->高级---->删除应用程序URL文本框中输入list.html的联接.
我的是http://liaoyuan:8080/myjnlp/app/list.html,按确定,点查看远程应用程序就可以看到MyIE列在其中,便可以运行.

这个程序我只用了一点点jnlp的东西,他还有一些的服务如访问本地文件,打印等.可参考JNLP Developer's Pack的帮助.
一、Docker解决了什么问题?         一款产品从开发到上线,从操作系统,到环境运行,在到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司不得不面对的问题,特别是各版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。         Docker对此给出了一个标准化的解决方案。         环境配置如此麻烦,换一台机器,就要重来一次,费力费时。那么软件可以不可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用Docker可以消除协作编码时“在我的机器上可以正常工作”的问题。           传统上认为,软件编码开发/测试结束后,所产出的成果就是程序或是能够编译执行的二进制字节码等。而为了让这些程序可以顺利执行,开发团队也得准备完善的部署文件,让运维团队得以部署应用程序,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然经常发生部署失败的情况。Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像(image)将作业系统核心除外,运作应用程序所需要的系统环境,由上而下打包,达到应用程序快平台的无法接轨运作。 二、Docker是个啥         Docker是基于Go语言实现的云开源项目。         Docker的主要目标是“Build,Ship and Run Any APP,Anywhere”,也就是通过对应组件的封装、分发、部署、运行等生命周期的管理,是用户的App及其运行环境能够做到“一次封装,到处运行”。         Linux容器技术的出现就解决了这样一个问题,而Docker就是在它的基础上发展过来的。将应用运行的Docker容器上面,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机器上就可以一键部署好,大大简化了操作         Docker解决了运行环境和配置软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。 三、虚拟机与Docker         虚拟机就是带环境安装的一种解决方案。         它可以在一种操作系统里面运行另一种操作系统,比如在windows系统里运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去就跟真实的系统一样,能够使应用程序,操作系统和硬件三者之间逻辑不变   虚拟机的缺点: 资源占用多 冗余步骤多启动慢 由于虚拟机存在这些缺点,Linux发展出了另一种虚拟化技术:Linux容器(LinuxContainers,缩写为LXC)。         Linux容器不是模拟一个完整的操作系统,而是对进程进程进行隔离。有了容器就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆包一整套操作系统,只需要软件工程所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一的工作。   比较了Docker和传统虚拟机方式的不同之处: 传统虚拟机技术是虚拟机出一套硬件后,在其上运行一个完整操作系统,在该系统上在运行所需应用进程; 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。每个容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,能区分计算字资源。   四、开发/运维(DevOps) 更快速的应用交付和部署 更便捷的升级和扩缩容 更简单的系统运维 更高效的计算资源利用   五、Docker安装 Docker支持一下的CentOS版本: CentOS 7(64-bit) CentOS 6.5(64-bit)或更高版本   目前,CentOS仅发行版中的内核支持Docker。 Docker运行在CentOS7上,系统内核版本为3.10以上 Docker运行在CentOS6.5或更高版本,系统内核版本为2.6.32-431或跟高的版本 使用uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)   六、Docker的基本组成   Docker镜像(image)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。 Docker容器(Container)独立运行的一个或一组应用。容器就是镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个建议的Linux环境和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上层那一层是可读可写的。 Docker仓库(Repository)是集中存放镜像文件的场所。仓库和仓库注册服务器是有区别的。仓库注册服务器上往往存放着很多个仓库,每一个仓库又包含了多个镜像,每个镜像有不同的的标签(tag)。仓库分为公开仓库和私有仓库两种形式。最大的公开仓库是DockerHub         Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序或配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件。只有通过这个镜像文件才能生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。可以生成多个同时运行的容器实例。   七、安装Docker(CentOS7) 参考官网:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/ 1.卸载旧版本(没有装过可以直接跳过) sudo yum remove docker     docker-common     docker-selinux     docker-engine2. 安装所需的软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm23.设置stable镜像仓库 sudo yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo4.启用edge和testing镜像仓库(可选) sudo yum-config-manager --enable docker-ce-edgesudo yum-config-manager --enable docker-ce-testing5.更新yml的软件索引 sudo yum makecache fast6.安装最新的DockerCE sudo yum install docker-ce7.启动Docker sudo systemctl start docker8.采用阿里云镜像加速(可选) 访问https://dev.aliyun.com/search.html 注册阿里云账号,并登陆 点击进入管理中心,找到镜像加速区 根据阿里云提示修改Docker配置 9.测试安装是否成功,运行HelloWord镜像 sudo docker run hello-world  运行成功! 10.Docker运行步骤    

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧