Java网络加载协议(JNLP)及Java Web Start

jnlp 项目部署发布示例 jnlp 项目示例 文章目录jnlp 项目示例简介jnlp项目示例1. 创建一个可执行jar2. 为jar添加签名3. 编写 jnlp 文件4. 发布前三步的文件到服务器5. 测试执行问题浏览器输入Url只下载不执行 & 双击`.jnlp` 文件不执行 简介 JNLP(Java Network Launch Protocol)是一种用来在网络中部署应用程序的一种协议; 在客户端只需要安装 ... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 原文:http://java.sun.com/jdc/JDCTechTips/2001/tt0530.html 在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持 对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。 Java Network Launching Protocol (JNLP,java网络加载协议) 承诺改变这个现状。通过JCP(Java Community Process)的JSR-56的开发, JNLP解决了很多先前用java开发针对客户端的功能的问题。一个JNLP客户端是一个应用程序或者说服务,它可以从宿主于网络的资源中加载应用程序。如果你使用JNLP打包一个应用程序,那么一个JNLP客户端能够: o 为该应用探测,安装并且使用正确版本的JRE(java运行时环境) o 从浏览器或者桌面加载应用程序 o 当新版本的应用出现时自动下载最新的版本。 o 为了加速启动速度在本机缓存应用程序需要的类 o 可以作为applet或者应用程序运行 o 在必要的情况下下载原始的库 o 以安全的方式使用诸如文件系统这样的本机资源 o 自动定位和加载外部依赖资源 Sun 提供了一个实现JNLP的称为Java Web Start(JWS)的参考实现。让我们使用它开发一个使用JFC Swing的简单应用。为了做这个,你需要从http://java.sun.com/products/javawebstart下载JWS。(译者注:JDK的新版本JDK1.4已经内置JWS,无须另外下载。) 下面是应用程序的代码: //File HelloJNLP.java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class HelloJNLP extends JFrame { public HelloJNLP() { super("Hello JNLP"); String loadedFrom = this.getClass().getClassLoader().toString(); JLabel jl = new JLabel("loaded by " loadedFrom); JEditorPane jtp = new JEditorPane("text/plain", "Edit this text"); getContentPane().add(jl, BorderLayout.NORTH); getContentPane().add(jtp, BorderLayout.CENTER); } 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); } }); } } JNLP的核心是一个发布清单(deployment manifest)。它是一个使用.jnlp做 扩展名的XML文件(JNLP规范简单的称之为"JNLP 文件")。要发布HelloJNLP,你需要在JNLP文件中描述它,就像下面这样: Hello Tech Tips Sample May 2001 这个清单包含客户端需要下载和使用HelloJNLP的所有信息: o jnlp元素的codebase属性指出搜索应用程序资源的顶级URL。 o information元素指出一个JNLP用户接口可以显示给客户端的信息。 o j2se元素指出客户端必须有1.2版本或者更新的J2SE(tm)。(这是对于applet开发的一个大的提高,因为它常常受限于浏览器提供的VM(虚拟机)) o jar元素指出程序的JAR文件的相对于jnlp codebase位置。 o application-desc元素指出要运行的类。你可以添加子元素用以指定命令行参数或者系统属性。 要将这个应用程序发布给一个web服务器,你需要执行以下的步骤: 1. 修改jnlp的codebase和hrefURL为你自己的web服务器的合适的URL。 2. 将JNLP文件发布到web服务器。 3. 编译并打包HelloJNLP.java并发布到web服务器。例如: jar cvf HelloJNLP.jar HelloJNLP.class HelloJNLP$1.class 4. 创建一个图标HelloJNLP.jpg并将之安装在web服务器上。你可以使用 http://staff.develop.com/halloway/TechTips/May2001/HelloJNLP.jpg 5. 设置你的web服务器的mime-type关联:.jnlp映射到mime-type application/x-java-jnlp-file。例如,对于Apache,添加如下一行到mime.types: application/x-java-jnlp-file jnlp 重新启动web服务器。 从客户端执行那个应用程序,首先确认你已经安装了JWS。然后简单的在浏览器中指向该jnlp文件。JWS客户端将下载该jnlp文件,下载必要的资源,加载应用程序。你所看到的将是在一个编辑区中显示的文本"Edit this text" 。如果你在配置web服务器上有问题或者不能使用web服务器,你可以从 http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp 加载这个程序。 注意HelloJNLP不是作为一个applet运行在浏览器中,而是作为一个独立的应用程序。 当你关闭程序时,HelloJNLP使用System.out打印消息"Shutting down...",然而没有控制台可见。控制台是JWS的诸多设置中缺省设置为"off"的其中一个。这是你可以修改的一对设置中的一个值,就像下面这样: 1. 编辑JWS安装目录中的javaws.cfg文件。添加一行"javaws.cfg.forceUpdate=true"。 这会导致JWS在启动应用程序前自动检查更新的版本。 2. 运行JWS。使用菜单File->Preferences,进入Advanced标签并且选择"Show Java Console"。(由于JDK1.4中的本机化,JWS将显示中文的界面,所以此处的因为被自动显示为对应的中文)同意,选择"Log Output"将日志输出到你选择的文件。当你在调试时并且需要捕获System.out和System.err时是非常有用的。 HelloJNLP显示一个编辑器,但是编辑器的内容在你关闭程序后将丢失。将下面的代码添加到HelloJNLP.java会自动的将编辑器的状态存储到客户端的硬盘上: //changes to HelloJNLP.java import java.io.*; import java.net.*; import javax.jnlp.*; //replace the constructor with this new version: JEditorPane jtp; public HelloJNLP() { super("Hello JNLP, Second Version"); String loadedFrom = this.getClass().getClassLoader().toString(); JLabel jl = new JLabel("loaded by " loadedFrom); jtp = new JEditorPane("text/plain", "Edit this text"); readEditorContents(); getContentPane().add(jl, BorderLayout.NORTH); getContentPane().add(jtp, BorderLayout.CENTER); addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent e) { System.out.println("Shutting down..."); try { writeEditorContents(); } catch (Exception ex) { System.out.println("Yoinks!"); ex.printStackTrace(); } System.exit(0); } }); } //add these helper methods private void writeEditorContents() throws UnavailableServiceException, IOException { System.out.println("writeEditorContents"); PersistenceService ps = (PersistenceService) ServiceManager.lookup("javax.jnlp.PersistenceService"); BasicService bs = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService"); URL baseURL = bs.getCodeBase(); System.out.println("CodeBase was " baseURL); URL editorURL = new URL(baseURL, "Editor"); try { ps.create(editorURL, 1024); } catch (Exception e) { e.printStackTrace(); } FileContents fc = ps.get(editorURL); DataOutputStream os = new DataOutputStream( fc.getOutputStream(false)); String s = jtp.getText(); os.writeUTF(s); os.flush(); os.close(); } private void readEditorContents() { try { PersistenceService ps = (PersistenceService) ServiceManager.lookup("javax.jnlp.PersistenceService"); BasicService bs = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService"); URL baseURL = bs.getCodeBase(); URL editorURL = new URL(baseURL, "Editor"); FileContents fc = ps.get(editorURL); DataInputStream is = new DataInputStream(fc.getInputStream()); jtp.setText(is.readUTF()); is.close(); } catch (Exception e) { e.printStackTrace(); } } (译者注:正常编译需要在CLASSPATH中添加javaws.jar的路径,在windows下为C:/Program Files/Java Web Start目录下) JNLP API定义了一套的服务用以绕过安全沙盒使得一些通常的客户端操作可以使用。 在writeEditorContents方法中,BasicService查找应用程序的代码目录,然后 PersistenceService将编辑区的内容缓存在本机硬盘上,这些内容被键入到一个和应用程序目录相对的URL下。PersistenceService提供的名字/值对数据和浏览器的cookies很相似。JWS通过一对被称为"muffins"的东西实现了这个,muffins不时候用来存储大数据,他们应该用于在客户端缓存小的标识符。然后这些标识符能被用于在服务器上定位大的信息。 在web服务器上重新发布修改过的应用程序,然后试着从客户端运行它--依然通过URL。如果你没有web服务器,你可以从 http://staff.develop.com/halloway/TechTips/May2001/Hello2.jnlp 运行这个新版本。JWS自动探测程序被改变并运行新的版本。你可以通过检查标题条的字符串来证实这点,它现在将显示"Hello JNLP,Second Version." 修改编辑区的内容,然后关闭它。当你再次加载该程序时,你的改变会出现。(当你第一次运行新版的程序时你会在控制台看到一个异常,这是因为readEditorContents 第一次不能找到muffin。) (译者注:实际上第一次运行时出现的异常导致程序无法正常结束,从而使得编辑区的内容无法写入客户端,下次运行时也相当于第一次运行。即此程序无法展示文章的特性,可能是于笔者的JWS的版本有关,笔者使用的是最新的1.0.1_02(build b03)) JNLP提供了比这里演示的更多的服务。例如,你可以: o 很好的控制程序如何被下载 o 描述各个JAR之间的依赖关系 o 下载并运行本机代码安装程序 o 对签名的代码授予附件的权限 o 请求指定版本的程序或者applet 要了解更多有关JNLP的情况,请到 http://java.sun.com/products/javawebstart/download-spec.html 下载JNLP规范。 要了解更多JWS的情况,请参考http://java.sun.com/products/javawebstart/
JDK 1.5 新特性之(Java Web Start) 前言:当我们遇到以jnlp为后缀的文件的时候会感到很诧异,没关系读完这篇文件你就会明白了。 一、概述   在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用... 阅读详情

相关推荐

Java网络启动协议JNLP项目实战详解

JNLP全称是 Java Network Launch Protocol,中文叫“Java网络启动协议”。听名字平平无奇,但它干的事可不简单:让你通过浏览器点击一个链接,就能远程拉起一个完整的Java桌面应用!想象一下,你在内网门户上看到一个“财务报表生成器”的按钮,点击后弹出Java Web Start的加载界面,几秒钟后熟悉的Swing窗口就出现了——而且下次打开时已经自动更新到了最新版。整个过程不需要管理员权限,也不用担心版本混乱。这就是JNLP的核心价值:✅。

weixin_35706067的博客 1006

jnlp简单使用

JNLP是 Java Network Launch Protocol的简写,是一种用来在网络中部署应用程序的一种协议;在客户端只需要安装 java web start就可以使用服务器端的软件,它具有自动更新应用程序版本的功能;其实要部署一个jnlp程序也是很简单的,下面我们就来部署 一个简单的程序;要在服务器部署应用程序,一个最主要的就是编写一个部署文件,它是一种xml格式的文件,以jnlp为后缀

semon19的专栏 3077

Java Web Start技术详解与实战入门

Java Web Start(简称 JWS)是一项基于标准 HTTP 协议的 Java 应用部署技术,旨在实现“一次编写,随处运行”的跨平台交付能力。通过浏览器或直接调用.jnlp文件,JWS 能够自动从服务器下载 Java 应用程序,并在本地 JVM 中安全运行,无需用户手动安装或配置复杂的依赖环境。其核心架构依赖于 JNLP(Java Network Launch Protocol)协议,结合本地缓存、安全沙箱和自动版本更新机制,显著降低了传统桌面应用部署的复杂性。JWS 通过。

weixin_42146230的博客 983

.jnlp 文件打开方式

jnlp文件打开需要安装jre ,java环境,通过java环境运行即可,下面介绍详细步骤 1、下载、安装最新版jre环境,直接下一步即可 ou 2、在需要打开的jnlp文件夹,按shift 键,右键打开命令窗口 3、在命令窗口输入javaws  xxx.inlp  即可

优弧的博客 10万+

Visual Studio Code 打开java项目

在 Visual Studio Code 中打开并运行一个 Java 项目之前,你需要确保你已经完成了一些初始设置。

2677

EMC辐射发射测试:垂直与水平极化测试原理与实战指南

电磁兼容(EMC)测试是确保电子设备在复杂电磁环境中稳定运行的关键环节,其核心在于评估设备产生的电磁干扰(EMI)强度。辐射发射测试作为EMC测试的重要组成部分,通过测量设备向空间辐射的电磁噪声,判断其是否符合国际标准限值。测试原理基于电磁波的极化特性,即电场矢量的振动方向,主要分为垂直极化和水平极化。理解极化特性对于精准定位辐射源、高效进行EMC整改具有重要技术价值。在工程实践中,垂直极化噪声通常源于线缆辐射等垂直结构,而水平极化噪声多来自PCB走线等水平结构。通过分别测量两种极化方向的辐射最大值,可以全

weixin_32770423的博客 360

JNLP的使用及碰到的一些问题

JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。 Java桌面应用程序以JNLP 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优点。 [以上内容摘自百度搜索,侵...

蜡笔小达新的博客 4631

2025华为OD机试真题+全流程解析+备考攻略+面试技巧+机考经验分享+Java/python/JS/C++/C语言实现

本专栏包含华为 OD 机试最新的 A卷+B卷+C卷+D卷+E卷题库,为全网最全、最新题库,500+真题。每一篇文章都包含了题目描述、解题思路以及实现代码。同时免费提供最新的在线OJ 刷题系统。已有上百名小伙伴通过刷真题题库通过了华为od机考,拒绝一切形式的代考,替考行为!!!以下是本专栏详细内容介绍:本专栏提供在线OJ刷题系统:OJ题库OJ系统注册&使用教程:OJ使用教程其他专栏以及答疑介绍:50+ 高频面试手撕真题,已有上百位小伙伴高频认证。1:机试没过,半年的冷冻期。2:已经订阅过我专栏的同学,推荐新人

MISAYAONE的博客 2226

jnlp(Java网络加载协议)原来很简单

jnlp(Java网络加载协议)原来很简单Java Network Launching Protocol (JNLP,java网络加载协议)。jnlp是什么?是java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序.好处就不用说了,如果你的java应用程序以jnlp 的方式发布,如果版本升级后,不需要再向所有用户

zmxj的专栏 2万+

RTK_ROS_导航(1): GNSS里程计

1. RTK 配置 4G CORS + 4G 网络 + 户外有信号,不能实现RTK,就恢复出厂设置 输出信息包含(一般需要三个同时打开): GAPPA:包含位置信息 GPVTG:包含速度信息 GPHDT:包含定向的朝向信息 2. ROS驱动 驱动安装sudo apt install ros-noetic-nmea-navsat-driver 运行,需要修改该功能包的启动端口,会自动解析上面的3个RTK语句信息roslaunch nmea_navsat_driver nmea_serial_d

旋风小短腿 4266

我正用AI Agent重构传统GIS 核心功能,说大白话做空间分析

GeoAI-UP项目通过AI Agent技术实现自然语言驱动的空间分析,核心创新包括: 意图识别层:通过LLM理解用户需求,自动拆解为可执行目标 智能任务规划:动态生成分析流程,处理复杂依赖关系 统一算子架构:采用标准化接口封装200+空间分析功能 可视化工作流。

专注GIS软件开发。 496

谈谈对jnlp的理解

jnlp(Java网络加载协议)Java Network Launching Protocol (JNLP,java网络加载协议)。        一直以来认为C/S的开发在java开发中一直是一个软肋,但是现在接触了很多网管软件,才发现C/S架构的开发,java也占有绝对的优势。包括nokia、爱立信、华为等等通信设备厂商,其网管软件都是大多都是java开发的,其中包括B/S和C/S

sun_gv的专栏 735

Coze智能体开发:如何搭建一个生成长文本的工作流

扣子工作流提供了流程定制化的能力,我们可以把长文生成的流程拆分为多个步骤,例如先通过大模型节点生成大纲、再使用循环节点依次扩写各个段落,最后将各个段落组合起来,从而实现长文生成流程。此工作流可适用于学术写作、商业报告、小说创作等多种场景。

王国平的博客 1791

java jnlp_Java Web Start 与jnlp结合实例讲解

JNLP简单应用JNLP,全称为Java Network Launch Protocol,以为Java网络加载协议。JNLP是Java WebStart的一个组成协议,而Java WebStart是一种简化Java 应用程序部署的技术,根据jnlp的配置文件,自动去网络上加载应用程序,并运行在Java WebStart上(在JDK1.4以后都包含了Java WebStart)。通过JNLP发布程序...

weixin_39542093的博客 678

Qt —— 百度离线地图 - 加载百度离线地图、及地图上绘图(附:源码)

Qt —— 加载百度离线地图、及简单绘图(附源码)

1063

利用NLP技术分析爬取的文本数据:Python爬虫与自然语言处理实战

网页爬虫(Web Crawler)是一种自动化脚本,通过模拟人类浏览网页的方式,定期抓取网页内容并进行分析和存储。对于大规模的数据抓取任务,爬虫技术提供了极大的便利。常见的Python爬虫库有requestsSelenium等。在本篇博客中,我们从爬取网页文本数据开始,通过清洗和预处理,最终利用自然语言处理技术(包括情感分析、文本分类等)对数据进行了深度分析。通过该过程,我们展示了如何使用Python爬虫抓取文本数据,并利用NLP技术进行分析和建模。

2201_76125261的博客 628
上一篇: Oracle 9i的Jdeveloper paper(PDF)
下一篇: 理解EJB的参数传递
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值