`
rmzdb
  • 浏览: 80363 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

【原】jnlp 分平台加载jar包 需要注意的配置

 
阅读更多

在网络上找了很久,没有找到jnlp的完整的shema文档。这里找到部分资料,记录下,关于分平台记载jar包问题。

 

一、配置问题

The Java Web Start Resource tag

The “Resource” tag in the Java Web Start descriptor has two key elements to allow efficient Java application deployment. One important attribute of the resource tag is the “os” attribute. This attribute allows you to specify specific platforms for the deployment of your application. Options in the “os” attribute can be “Windows”, “Linux”, “Mac OS X” etc.

The next relevant resource attribute is the “arch” attribute. This attribute allows for the specification of the processor architecture. Relevant values for the “arch” attribute include “x86″ and “amd64″ (even for Intel 64bit). Additional “arch” values are seen below in the Web Start JNLP example code.

The following is an example of a Web Start JNLP file (“TestBrowserAllPlatforms.jnlp”):

 

<jnlp
spec="1.0+"
codebase="{Set the base URL here where all jars stored. For example http://www.webrenderer.com/webstart/}"
href="TestBrowserAllPlatforms.jnlp">

<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.4+"/>
<jar href="TestBrowser.jar"/>
<jar href="webrenderer-swing.jar"/>
</resources>

<resources os="Windows" arch="amd64">
<jar href="webrenderer-swing-windows64.jar"/>
<jar href="corecomponents-swing-windows64.jar"/>
</resources>

<resources os="Windows" arch="x86">
<jar href="webrenderer-swing-windows32.jar"/>
<jar href="corecomponents-swing-windows32.jar"/>
</resources>

<resources os="Linux" arch="amd64">
<jar href="webrenderer-swing-linux64.jar"/>
<jar href="corecomponents-swing-linux64.jar"/>
</resources>

<resources os="Linux" arch="i386 x86">
<jar href="webrenderer-swing-linux32.jar"/>
<jar href="corecomponents-swing-linux32.jar"/>
</resources>

<resources os="Mac\ OS\ X" arch="x86_64">
<jar href="webrenderer-swing-osx64.jar"/>
<jar href="corecomponents-swing-osx64.jar"/>
</resources>

<resources os="Mac\ OS\ X" arch="i386 x86">
<jar href="webrenderer-swing-osx32.jar"/>
<jar href="corecomponents-swing-osx32.jar"/>
</resources>

<application-desc main-class="TestBrowser"/>
</jnlp>

 

二、动态生成问题:

 

(如果tomcat版本老还得去配置conf/web.xml,加上

<mime-mapping>
     <extension>jnlp</extension>
      <mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>)

 

    代码:

 

PrintWriter out = response.getWriter();
 
    response.setContentType("application/x-java-jnlp-file");
    out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    out.println("<jnlp spec=\"1.0+\" codebase=\"http://localhost\" href=\"report/jnlp/openFile.do\">");
    out.println("<information>");
    out.println("<title>JNLP</title>");
    out.println("<vendor>Hust</vendor>");
    out.println("<homepage href=\"\"/>");
    out.println("<description>Web Start</description>");
    out.println("</information>");
    out.println("<security>");
    out.println("</security>");
    out.println("<resources>");
    out.println("<j2se version=\"1.3+\"/>");
    out.println("<jar href=\"finereport.jar\"/>");
    out.println("</resources>");
    out.println("<application-desc main-class=\"com.vanda.report.ZDesigner\">");
    out.println("</application-desc>");
    out.println("</jnlp>");
out.flush();
out.close();

 

   三、动态生成缓存问题:

 

在实际应用中,由于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");

 

 一个需要注意的问题是,在动态生成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文件内容,否则可能会被缓存,无法及时更新程序。

分享到:
评论

相关推荐

    weasis开源项目jar包

    Weasis是一款开源的医疗影像查看器,其设计目标是提供一个免费、跨平台的解决方案,用于查看、管理和处理医学图像。这个压缩包包含了Weasis项目的一些核心组件和资源,让我们一一解析这些文件来理解它们的功能和重要...

    JCreator生成.jar文件java生成exe文件.doc

    不过要注意,这种方法生成的.exe文件通常比原始的.jar文件大,且仅适用于Windows平台。对于跨平台的需求,Java的原生可执行文件(如.jnlp)或使用其他技术(如Java Web Start)可能是更好的选择。

    questionnaire.rar

    总的来说,这个RAR文件提供了一套完整的Java应用程序部署方案,包括应用程序本身(jar包)、Windows下的启动方式(.bat和.exe)以及可能的配置文件(.xml)。用户解压后,根据系统环境选择相应的启动方式,就可以...

    java皮肤包

    Java皮肤包是一种允许用户自定义软件界面外观的功能,通常用于桌面...而提供的压缩包文件“皮肤包”可能包含了具体的LookAndFeel配置和资源,开发者需要按照上述方法进行解压和加载,以便在自己的项目中应用这些皮肤。

    Java web Start初级教程

    2. **下载资源**:JWS解析jnlp文件后,会从服务器下载所需的资源(例如jar包),并缓存到本地。 3. **执行程序**:下载完成后,JWS会利用Java虚拟机(JVM)运行应用程序。 4. **版本控制**:首次运行时可能会稍慢,...

    WorldWind学习笔记[二]worldwind 在applet上部署

    `*.jnlp`文件(如`WWJApplet.jnlp`和`jogl.jnlp`)是Java Web Start(JWS)文件,它们用于配置和启动Applet,并管理所需的依赖项。 要将WorldWind部署到Applet,你需要遵循以下步骤: 1. **创建HTML页面**: 创建...

    jws-1.6.1环境安装包

    1. **部署**:开发者将Java应用程序打包成JAR文件,并在服务器上配置XML文件(通常称为JNLP,Java Network Launching Protocol文件)来描述应用的资源和启动参数。 2. **启动**:用户点击Web页面上的链接,浏览器...

    docker下nginx配置压缩字体和图片等配置

    在现代Web开发中,为了提高页面加载速度和减少网络带宽消耗,通常会采用内容压缩技术。Docker中的Nginx服务器作为一个流行的反向代理和负载均衡器,可以通过配置实现对字体、图片等静态资源的GZIP压缩。本文将详细...

    webstart

    例如,压缩包中的"1211850232338-integrated.jnlp"就是一个JNLP文件,它指导WebStart如何加载和运行应用程序。 3. WebStart的工作流程: - 用户在浏览器中点击一个JNLP链接。 - 浏览器将JNLP文件发送到WebStart...

    图片浏览小程序(java+applet).rar

    7. 编译与打包:使用javac编译源代码,jar命令打包为可执行的JAR文件,可能还需要使用JNLP(Java Web Start)技术发布Applet。 通过学习和分析这个项目,开发者可以加深对Java GUI编程、Applet技术以及图片处理的...

    java web start教程

    开发者需要编写JNLP文件来描述他们的应用程序,然后将其与应用的JAR文件一起部署在Web服务器上。用户点击JNLP链接,JWS就会解析这个文件,加载必要的资源,并启动应用程序。 开发JWS应用的基本流程包括以下几个步骤...

    SwingX Demo

    2. libappend.cmd:这个文件可能是为了辅助运行SwingX Demo而创建的,它可能用于添加额外的库到系统的类路径中,确保所有必要的依赖都被正确加载。 3. SwingXSet.jar:这应该是SwingX库的核心组件,包含了SwingX库...

    Jdk-11.0.1.zip

    `conf`目录包含了Java的配置文件,如`java.security`用于定义安全策略,`javaws.jnlp`用于Web启动的相关设置。 8. **头文件(include)** `include`目录包含了用于本地方法接口(JNI)的头文件,允许Java代码调用...

    jmxtools-1.2.1

    JMX(Java Management Extensions,Java管理扩展)是Java平台提供的一种标准框架,用于管理和监控Java应用程序、设备和服务。JMXTools 1.2.1是针对JMX的一套实用工具集,它为开发者和系统管理员提供了方便的接口和...

    Kettle3.2的Webstart

    3. **`spoon.jnlp`**:这个文件名表明它是Kettle的Spoon客户端的Webstart配置文件。Spoon是Kettle的图形用户界面,用于设计和执行ETL转换。当用户通过Webstart访问Kettle 3.2时,他们将下载并运行这个`spoon.jnlp`...

    Jsp系列例程之二---plugin

    1. **类型属性(type)**:这个属性指定要插入的插件类型,可以是"applet"(Java Applet)或"jnlp"(Java Web Start)。 2. **代码属性(code)**:这个属性用于指定Java类的名称或包含Applet主类的JAR文件的URL。 ...

    luke--- lucene索引数据查看器

    1. **下载与安装**:Luke通常以jar文件形式发布,可以直接运行,或者在Java Web Start环境下通过jnlp文件(如luke.jnlp)在线启动。 2. **打开索引**:选择要查看的Lucene索引目录,Luke会自动加载并解析索引结构。...

    h2 database description

    - **目录结构**:包含lib、doc等目录,其中lib目录存放jar包。 #### 控制台应用 - **启动方式**:通过命令行或IDE启动控制台应用。 - **防火墙配置**:如果遇到端口被占用的问题,可以修改端口号以避开防火墙限制...

    TM Simulator-开源

    `config.xml` 文件则可能存储了应用程序的配置设置,用户或开发者可以根据需要调整这些设置。 `lib` 目录包含了应用程序依赖的外部库文件,这些库文件提供了额外的功能,如图形渲染(JavaFX)、输入输出处理或其他...

Global site tag (gtag.js) - Google Analytics