- 浏览: 415388 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
在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文件中描述它,就像下面这样:
<!--l version="1.0" encoding="UTF-8-->
<!-- file Hello.jnlp -->
href="http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp">
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/
发表评论
-
Android 数字签名学习笔记
2012-04-25 11:03 892在 Android系统中,所有安装到系统的应用程序都必有 ... -
序列化:serializable,hessian,protobuf性能对比
2011-10-31 17:08 1187分布式应用系统中,系统之间的通讯的质量决定了系统的可用性 ... -
JAR 文件揭密
2011-10-18 01:28 858JAR 文件是什么? ... -
SSL双向认证java实现
2011-10-17 23:49 983本文通过模拟场景,介绍SSL双向认证的java实现默认的情况下 ... -
Benchmark Analysis: Guice vs Spring
2011-04-19 14:35 1011The original link can be found ... -
NIO 包及工作原理
2011-03-11 11:14 1703NIO 包及工作原理 针对 ... -
使用Java NIO编写高性能的服务器
2011-03-11 01:19 735从JDK 1.4开始,Java的标 ... -
RMI, RMI-IIOP,JNDI
2009-05-21 17:31 14341. RMI-IIOP(Java Remote ... -
企业中的 RMI-IIOP
2009-05-21 17:13 979RMI 和 CORBA 常被视 ... -
JMX
2009-05-21 15:44 931JMX规范 1.1 J ... -
使用Eclipse IDE的技巧
2009-02-24 11:00 1750使用Eclipse IDE的技巧 作 ... -
spring quartz 动态定时任务
2009-01-22 13:31 4416什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
基于struts+spring+ibatis的轻量级
2009-01-12 16:21 1008基于struts+spring+ibatis的轻量级J2 ... -
Log4j配置实例[经典]
2009-01-12 14:53 1252Log4j配置实例[经典] 0 推荐 ... -
jbpm工作流学习心得
2008-09-19 13:59 1272一,装载流程: 第一种: java 代码 JbpmCo ... -
jbpm请假工作流
2008-09-19 13:56 1822请假流程(备用) 工作中要用到JBPM写工作流,自习的时 ... -
利用JExcel API操作EXCEL文件
2008-09-08 10:52 1437使用Windows操作系统的朋 ... -
jExcel API讲解
2008-09-08 10:51 1453转自:http://jhobby.iteye.com/blog ... -
Tomcat5.0乱码全解决方案
2008-09-02 11:56 1054http://hi.baidu.com/liet2008/bl ... -
Linux_Macintosh 平台下 Eclipse 环境中的 JNI 混合语言调试
2008-08-28 18:27 1458Linux_Macintosh 平台下 Eclipse ...
相关推荐
JWS是与网络浏览器相结合的应用软件,当用户点击链接的时候就会指向一个Java网络启动协议(Java Network Launching Protocol (JNLP) )文件,然后浏览器自动启动JWS,接着下载、缓存并运行基于Java技术的应用软件。...
JDeveloper 支持基于 XML 的 JNLP (Java Network Launching Protocol) 定义,Java Web Start 技术是建立在 JNLP 基础之上的。在 JDeveloper 中用 Java Web Start Wizard 向导,你可以在 Web 服务器上配置并维护应用...
JWS是与网络浏览器相结合的应用软件,当用户点击链接的时候就会指向一个Java网络启动协议(Java Network Launching Protocol (JNLP) )文件,然后浏览器自动启动JWS,接着下载、缓存并运行基于Java技术的应用软件。...
Entrepreneurship Successfully Launching New Ventures
Understanding the Overheads of Launching CUDA Kernels.pdf
Eclipse is more of a tools platform than a tool itself, Eclipse's launching capabilities depend entirely on the current set of installed plug-ins. This article describes the framework available to ...
实用开发工具Myeclipse,在启动tomcat时,不间断的会弹出 An internal error occurred during: "Calculating completion proposals...". java.lang.NullPointerException的错误对话框!
“ERROR launching JD-GU!' No suitable Java version found on your system!This program requires Java 1.8+Make sure you install the required Java version.” 可以进入安装的 JD-GUI.app, 右键显示包内容,...
The UIApplicationDelegate protocol declares methods that are implemented by the delegate of the singleton UIApplication object. These methods provide you with information about key events in an ...
去CSDN下载所谓破解出现以下错误:wrapper | Licensed to (null) for (null) wrapper | wrapper | Launching a JVM... jvm 1 | WrapperManager: Initializing... jvm 1 | WrapperJNI Error: Not licensed to use ...
org.eclipse.jdt.launching_3.7.102.v20141111-0953.jar org.eclipse.jdt.ui_3.10.2.v20141014-1419.jar org.eclipse.jdt_3.10.1.v20150204-1700.jar org.eclipse.m2e.jdt.ui_1.5.1.20150109-1820.jar org.eclipse.m...
JAVA music player. Project Homepage : http://www.javazoom.net/jlgui/jlgui.html Developer Homepage : http://sourceforge.net/project/?group_id=1344 -----------------------------------------------...
Matlab class for launching and managing asynchronous processes.zip
下列包的参考文档,从源码生成的。 org.eclipse.jdt.core org.eclipse.jdt.debug org.eclipse.jdt.junit org.eclipse.jdt.launching org.eclipse.jdt.ui
解决myeclipse10运行出现:CreateProcess error=87, ²ÎÊý´í 的问题,直接替换myeclipse安装路径\Common\plugins
电子商务英文课件:ch15 Launching a Successful Online Business.ppt
Win10安装软件提示“Error launching installer”的解决方法.docx
信息安全_数据安全_Launching feedback-driven fuzzin 安全行业 信息安全研究 可信计算 安全对抗 数据脱敏
org.maven.ide.eclipse.launching_0.12.1.20110112-1712.jar
在Myeclipse 8.5中用外带的tomcat时候,会因为JDK版本的问题出现Could not find the main class,按照上述文档的步骤就可以解决,我亲自体验过