- 浏览: 167043 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qq_21380041:
954414957@qq.com
HTML5数据可视化第二弹:打造最美3D机房 -
qq_21380041:
楼主,求代码
HTML5数据可视化第二弹:打造最美3D机房 -
luoaz:
楼主能不能传个源码的附件上来, 分享学习下呢?
HTML5+WebGL 3D机房开发实例 -
xiaosi1278:
你好能不能把你讲的源代码发一下!!做参考403541110@q ...
TWaver 3D 编辑器的使用(一)----设计3D场景以及数据绑定 -
TWaverGeek:
BigBird2012 写道您好,您能把您使用TWaver导入 ...
TWaver导入导出AutoCAD DXF图纸
Java很早就推出了Java Web Start(简称JWS)技术。这一技术的初衷很好:希望将桌面程序和Web页面之间搭起一个无缝的桥梁。虽然Applet技术已经存在了十多年,但是它日趋老迈衰落,所以JWS也就应运而生了。
但是JWS并未顺利实现它的初衷。从Java的几次大改版都可以看到,JWS的bug多多,漏洞频频,Sun和Oracle不得不频繁的进行打补丁修复。可以看看Java 5和6每次大小版本升级变化中,有多少是和Java Web Start有关的。难怪很多人都这样感叹:“哥再也不用Java Web Start部署应用了!”其实也未必,随着Java的不断完善,我们只要了解更多的技巧,就可以有效的消除一些JWS潜在的问题,并顺利地应用在企业应用中。
以2BizBox ERP项目为例,本文介绍如何在企业应用中利用动态生成JNLP文件的技术来实现应用的快速部署。
大家知道,2BizBox ERP作为一个免费的高质量ERP软件,有成千上万的用户。就我们开发团队负责维护的服务器,就有近千台。每台服务器都是一家企业,每家企业又有几十上百的客户端。如果采用下载客户端安装程序进行安装的方式来维护诸多的客户端,无疑是巨大的工作量,用户和我们开发团队都不会轻松方便。为了解决这一问题,采用JWS无疑是必然的选择。
为了让客户端自动启动下载和安装程序,我们在企业的2BizBox ERP服务器上部署以下JNLP文件内容:
<?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="http://**.**.**.**/webstart/"> <information> <title>2BizBox</title> <vendor>Serva Software</vendor> <homepage href="http://www.2bizbox.com"/> <description>2BizBox ERP 3</description> <offline-allowed/> </information> <security> <all-permissions/> </security> <update check="always" policy="always"/> <resources> <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" initial-heap-size="128m" max-heap-size="512m"/> <jar href="2bizbox.jar /> <jar href="lib1.jar /> <jar href="lib2.jar /> <jar href="lib3.jar /> <jar href="lib4.jar /> <!-- more jar.... --> </resources> <application-desc main-class="com.serva.bb2.gui.Main"> <argument>**.**.**.**</argument> </application-desc> </jnlp>
上面的JNLP文件定义了2BizBox ERP客户端启动所需要的jar包以及下载位置、jre版本等。
在实际应用中,效果良好。但是由于JNLP和JWS本身的bug,在某些情况下,后台jar程序更新升级后,用户侧启动jnlp并不能获得更新,需要强行清空JWS缓存才行,这肯定不是一般用户懂得的。还有一种情况,就是由于ERP本身的jar包发生了变化(例如发生了增减),此时相当于jnlp文件的内容发生了变化。这时候,要求用户一侧机器必须意识到jnlp的变化并先将jnlp进行更新。在很多java版本中(例如jre6的早期版本——例如jre6 update20之前),由于潜在的一些bug等原因,都不能顺利地进行更新,导致程序启动失败。
如何解决这一情况呢?采用动态jnlp是一个有效的方法。
动态jnlp的思路是:在服务器的后端,通过jsp或servlet来动态的生成一个jnlp文件,而不是放置一个静态的固定不变的jnlp文件。这样,jnlp文件内容就可以通过后台应用的逻辑进行动态生成创建:需要什么jar包、需要什么jre版本等等。
以jsp为例。在这个jsp中,首先要注意的几个技术点是:要设置本页面不要被浏览器缓存,放置jnlp内容变化无法及时被更新;其次要设置mime类型让浏览器认为它是一个jnlp文件,以便下载执行而不是直接在浏览器中显示出来。通过设置response即可达到这些目的:
response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "0"); response.setHeader("Content-Disposition", "filename=\"bb.jnlp\";"); response.setContentType("application/x-java-jnlp-file");
其中,禁止浏览器和webstart缓存jnlp内容,通过设置:response.setHeader("Pragma", "no-cache");和response.setHeader("Expires", "0");
设置文件类型,并给定一个动态的文件名。这个通过这个进行:response.setHeader("Content-Disposition", "filename=\"bb.jnlp\";");response.setContentType("application/x-java-jnlp-file");
一个需要注意的问题是,在动态生成jnlp文件时,要注意jnlp文件中的href标签不要进行设置。为什么呢?看一下jnlp的格式文档是这样说的:
http://lopica.sourceforge.net/ref.html#jnlp
The jnlp file's one and only root.
Attributes
spec=version , optional
Specifies what versions of the jnlp spec a jnlp file works with. The default value is 1.0+. Thus, you can typically leave it out.
version=version , optional
Specifies the version of the application as well as the version of the jnlp file itself.
codebase=url , optional
Specifies the codebase for the application. Codebase is also used as base URL for all relative URLs in href attributes.
href=url , optional
Contains the location of the jnlp file as a URL. If you leave out the href attribute, Web Start will disable the update check on your JNLP file, and Web Start will not treat each new JNLP file as an application update - only updated jar files will. Leaving out href usually makes only sense if your jnlp file is created dynamically (that is, throug a cgi-script, for example) and if your jnlp file's arguments or properties change from request to request (user to user).
Note, that Java Web Start needs href to list your app in the Web Start Application Manager.
可见在动态生成jnlp时候就不要设置href了,这样就可以保证每次浏览器会重新下载jnlp文件内容,否则可能会被缓存,无法及时更新程序。
另外一个技巧是:jnlp文件中的jar包,可以进行动态检查文件jar包并动态生成。这样,如果以后程序的jar文件有增减,就不必修改jnlp文件了。方法也很简单:检查当前web在服务器的绝对路径,并list所有的jar文件,然后在jnlp生成时候输出即可:
<% String urlString=request.getRequestURL().toString(); URL url=new URL(urlString); String host=url.getHost(); String path = request.getSession().getServletContext().getRealPath("/"); path=path.replace("\\.\\", "\\"); File file=new File(path); String[] files = file.list(); ArrayList jarNames=new ArrayList(); for(int i=0;i<files.length;i++){ String fileName=files[i]; if(fileName.toLowerCase().endsWith(".jar")){ jarNames.add(fileName); } } %>
然后在jar的部分这样列出:
<resources> <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" initial-heap-size="128m" max-heap-size="512m"/> <% for(int i=0;i<jarNames.size();i++){ out.write("\n"); out.write("<jar href=\""+jarNames.get(i).toString()+"\"/>"); } %> </resources>
最后,如果需要在jnlp中指定当前服务器的ip地址或主机地址,也可以通过动态生成。例如jnlp文件中的codebase,就是如此。另外,2BizBox ERP还需要在主函数中给出当前服务器的ip地址。而对于上千家的2BizBox服务器,每个jnlp要手工维护ip地址,是不可想象的。这里通过动态生成,就永远的解决了这个问题:
String urlString=request.getRequestURL().toString(); URL url=new URL(urlString); String host=url.getHost();
然后在jnlp中:
<jnlp spec="1.0+" codebase="http://<%=host%>/webstart/"> ... <application-desc main-class="com.serva.bb2.gui.Main"> <argument><%=host%></argument> </application-desc>
这样,通过jsp动态生成jnlp的方案就完成了。它在2BizBox ERP中应用良好,方便的让上千家2BizBox ERP的云主机用户快速得到程序更新,而简化了程序的维护方式。
发表评论
-
数字图像处理技术在TWaver可视化中的应用
2015-04-16 14:30 730数字图像处理(Digital Image Processin ... -
TWaver HTML5之树形布局
2015-03-11 10:53 1438转眼间春节假期已经过完,作为一个职业的程序猿,不知道大家有没 ... -
TWaver推智能手表挑战华为苹果
2015-03-04 10:35 6182015年的春节刚过,苹果、华为、三星就紧锣密鼓的发布了各自 ... -
TWaver矢量小试——Android演进路线图
2015-02-02 11:56 1235还有半个多月就到春节了,年底相信很多公司都会进行年度总结以及 ... -
用TWaver加载大型游戏场景一例
2015-01-06 13:52 735游戏中经常会出现一些大型的户外场景,例如一个小镇、一座古城等 ... -
22万个木箱!TWaver 3D极限压榨
2014-12-29 11:31 902打开个门户网站都千呼万唤,我们还能期待网页上的3D技术会有 ... -
巧用TWaver 3D 矢量图形功能
2014-10-29 11:14 600的确,提起TWaver,大家想到的首先是“电信拓扑图组件”。 ... -
TWaver GIS在电信中的使用
2014-10-09 14:56 551GIS作为信息系统的重要组成部分,在电信行业中的应用由来已久。 ... -
如何创建环型、树型双层布局
2014-09-19 10:58 833TWaver的Demo中有常用的环型布局和树型布局,但是当网 ... -
如何创建发光的环路
2014-09-16 13:44 806先看看发光链路的运行效果:在这个Demo中主要包含三个技术 ... -
Autolayout性能优化
2014-09-03 11:05 985客户的需求就是我们进步的动力。最近有客户提出大数据量Top ... -
DNA分子结构3D模型
2014-08-21 15:16 895生物信息资源更新越来 ... -
TWaver版3D化学元素周期表
2014-07-14 10:17 1730很早就有人做3D网页版的化学元素周期表了,酷炫效果和新鲜技巧 ... -
在MONO Design中使用Flex3D
2014-07-08 10:04 689在项目开发组的努力下,HTML5 3D 的开发包变得越来越优 ... -
TWaver 3D技术在油田行业的应用
2014-05-26 15:29 683油田信息化是是数字油 ... -
用TWaver实现组合的Chart
2013-01-21 12:14 1427TWaver组件中提供了一些通用的Chart,比如Line ... -
TWaver Java内存占用测试
2012-12-25 13:50 884TWaver Java的性能大家有 ... -
JTree实现文件树
2012-11-05 10:57 670这篇文章介绍的内容其实跟TWaver的组件没有任何关系,但是个 ... -
TWaver With JavaFX
2012-10-10 18:08 839JavaFX Script被抛弃以后,很久不关心JavaFX了 ... -
如何让HTML5的表格支持后台排序与分页
2012-08-21 17:41 1404TWaver HTML5发布已有一段时间,使用的客户也是逐渐增 ...
相关推荐
### 利用 Java Web Start 发布 Java 程序 #### JWS——Java Web Start 的功能与优势 Java Web Start(简称 JWS)是 Sun Microsystems(现 Oracle)为解决 Java 应用程序部署和更新问题而开发的一项技术。它是 JSR-...
标题“JNLP ant webstart sign genkey sample”涉及到的是Java网络启动(Java Web Start,JWS)技术,以及如何使用Ant构建工具来签名JNLP应用。在Java Web Start中,JNLP(Java Network Launch Protocol)是用于启动...
"基于Java Web Start技术的VFP考试系统的设计与实现" 这篇文章主要介绍了基于Java Web Start技术的VFP考试系统的设计与实现。该系统应用了Java Web Start技术,包括考试、教师、教务三大模块,使得考试系统更加灵活...
使用Java Web Start运行Hiero.jnlp文件 用法二:(Mac) 右键点击Hiero.jar文件,选择Open With...,再选择Jar Launcher,之后打开运行界面了。 注:网上说保存时图片颠倒的问题,多数是软件使用问题,这个就请...
- **JNLP文件创建**:理解如何创建JNLP(Java Network Launching Protocol)文件,这是启动Java Web Start应用程序所必需的。 - **部署和更新**:学习如何部署Java Web Start应用程序,并确保其能够在用户的机器上...
将生成的`helloworld.jar`文件复制到`webstart/jar/jws`目录下。 ##### 步骤3:更新MANIFEST.MF文件 从`helloworld.jar`中提取出`MANIFEST.MF`文件,并修改其内容,指定主类: ```sh jar umf MANIFEST.MF hello...
这个jnlp(Java Web Start)文件是Java应用程序的启动链接,用户可以通过Java Web Start平台在浏览器上运行该演示。 描述中的"demo 和 sourcecode都在"意味着这个压缩包不仅提供了可执行的演示程序,还包含了源代码...
Java 和 JavaScript 是两种不同的编程语言,但在这个场景中,我们主要关注的是Java技术,特别是如何使用...对于跨平台的需求,Java的原生可执行文件(如.jnlp)或使用其他技术(如Java Web Start)可能是更好的选择。
欲深入了解Java Web Start的更多细节和技术文档,请访问Sun Microsystems官方网站或查阅相关的开发者社区和论坛,那里有丰富的资源和实践经验分享,帮助开发者充分利用JWS的优势,提升应用程序的用户体验和安全性。...
对于Java Web Start技术,它允许开发者将整个应用程序打包成一个JNLP文件,用户可以通过点击链接下载并运行整个Java应用程序,而无需直接安装。而JavaFX是Java的图形和媒体包,提供了丰富的API来构建富客户端应用...
8. 对于嵌入网页,生成jnlp文件(Java Web Start配置文件),并在网页中通过`<applet>`或`<object>`标签引用jnlp文件。 这个小应用程序的实现不仅可以加深对Java GUI编程的理解,还可以锻炼对事件处理、多线程以及...
1. **类型属性(type)**:这个属性指定要插入的插件类型,可以是"applet"(Java Applet)或"jnlp"(Java Web Start)。 2. **代码属性(code)**:这个属性用于指定Java类的名称或包含Applet主类的JAR文件的URL。 ...
下载Portecle的jnlp文件(如portecle.jnlp),通过Java Web Start运行。打开后,界面会显示一个空白的工作台,等待用户进行操作。 2. **创建KeyPair(密钥对)**:点击“Key Pair”按钮,选择“New”来生成新的密钥...
Java Web Start(JNLP)和JavaFX也提供更安全、更现代的替代方案。 在提供的压缩包中,你可能会发现各种不同功能的Applet示例,例如简单的图形绘制、动画展示、用户输入处理等。通过分析和修改这些代码,你可以深入...
Java Web Start允许用户从Web上下载并运行Java应用程序,而`javax.jnlp`则提供了对这一过程的编程接口,包括应用程序的安装、更新和安全控制。了解这个包,可以让你开发出能在Web环境中无缝部署和更新的Java应用程序...
5. **Applet to Desktop App Conversion**: 对于基于Swing或JavaFX的GUI应用,可以通过JavaFX的WebStart功能或JavaFX Packager工具将其转换为桌面应用,然后使用类似JPackage的工具创建.exe。 6. **使用Native ...
WebRCP WebRCP是用于使用Java Web Start启动Eclipse RCP应用程序的框架。 WebRCP支持最常见的平台。特征下载并解压缩生成的RCP存档启动给定的Eclipse RCP产品文件入门将项目导入到Eclipse工作区中编写自己的属性文件...