- 浏览: 663440 次
- 性别:
- 来自: 宇宙中的某个角落
文章分类
- 全部博客 (244)
- Java SE (57)
- EJB3.0 (7)
- Architecture (15)
- DDD (4)
- UML&GOF Patterns (17)
- scala (0)
- hadoop (1)
- Hibernate&JPA (8)
- webwork (2)
- Problems and Solution (3)
- search engine (Lucene) (4)
- .net C# (2)
- Web develop (9)
- OS(windows&linux) (2)
- Software Engineering (0)
- Resource shara (5)
- Javascript (1)
- apple (1)
- Data structure (11)
- English study (32)
- Assembly language (2)
- Feeling&emotion (5)
- Diary (23)
- Entertainment (17)
- 诗词赏析 (8)
- 道德经 (1)
- ios (5)
最新评论
-
zhuzf:
写的太好了
实例分析Java Class的文件结构 -
随便小屋:
写的太好了,Mark一下,楼主辛苦了!
实例分析Java Class的文件结构 -
lowkey2046:
引用 应用程序注册读就需事件和相关联的事件处理器应该是读就绪吧 ...
高性能IO设计的Reactor和Proactor模式 -
BigBird2012:
“JVM引入了分代收集的策略,其中对新生代采用"Ma ...
JVM内存模型以及垃圾收集策略解析 -
xuelian2010:
找到合适的人做正确的事情!!!
三月份辞职创业,北京第一家线下体验店成功开张,伙伴们加油!
Java 提供了对 URL 协议进行扩展的能力,通过扩展用户可以自定义 URL 通信协议, JDK 默认提供了对 HTTP,FTP,JAR,FILE 等的实现,而当需要自己定义通信协议的时候,就需要利用 JDK 提供的对 URL 扩展机制进行自定义。
JDK 主要提供了如下三种方式对 URL 进行扩展,每种方式都有各自的使用场景,下面我们分别看看具体 JDK 都给我们提供了哪些扩展点。
1. 实现 URLStreamHandlerFactory 接口,然后调用 URL.setURLStreamHandlerFactory.
采用这种方式的情况下,需要确保应用的其他地方没有调用 setURLStreamHandlerFactory ,因为此方法只能调用一次,如果多次调用会抛出 java.lang.Error: factory already defined. 比如在一些应用服务器的中使用的时候就要多加注意。
2. 创建 URLStreamHandler 的子类,这种方式必须满足如下两个约定:
a) 子类的类名必须是 Handler ,同时最后一级的包名必须是协议的名称,比如你自己定义了名为 mem 的协议,那么 handler 的全名不须是 com.company.protocol.Handler.
b) JVM 启动的时候,需要设置 java.protocol.handler.pkgs 系统属性,如果有多个实现类,那么中间用 | 隔开。
上面两个约定我们可以通过查看 JDK 中的 URL 的源代码,可以清晰的看到为什么要遵循这两个约定。下面我们就看一下 JDK 中关于 URL 的源代码。
static URLStreamHandler getURLStreamHandler(String protocol) { …… …… if (handler == null) { //这里获取java.protocol.handler.pkgs系统属性,同时用“|”隔开 String packagePrefixList = null; packagePrefixList = (String) java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( protocolPathProp, "")); if (packagePrefixList != "") { packagePrefixList += "|"; } // REMIND: decide whether to allow the "null" class prefix // or not. packagePrefixList += "sun.net.www.protocol"; StringTokenizer packagePrefixIter = new StringTokenizer(packagePrefixList, "|"); while (handler == null && packagePrefixIter.hasMoreTokens()) { String packagePrefix = packagePrefixIter.nextToken().trim(); try { //这里packagePrefix就是你自己制定的包名,protocol为你自定义的协议名,这 String clsName = packagePrefix + "." + protocol + ".Handler"; Class cls = null; try { cls = Class.forName(clsName);// 用加载URL的类加载器加载 } catch (ClassNotFoundException e) { ClassLoader cl = ClassLoader.getSystemClassLoader(); //采用系统类加载器加载 if (cl != null) { cls = cl.loadClass(clsName); } } if (cls != null) { handler = (URLStreamHandler) cls.newInstance(); } } catch (Exception e) { // any number of exceptions can get thrown here } } } } }
当采用这种方法的时候,需要注意的是自己写的 Handler 类必须放在系统类加载器可以加载到的地方。
3 实例化一个 URL 对象的时候传递一个 URLStreamHandler 的实例。这种方式的情况下, JDK 需要一个名为 specifyStreamHandler 的 NetPermission ,这就要求你需要去修改 jdk 安装目录下的 java.policy 文件进行授权。
发表评论
-
Java高级软件攻城狮,你在哪里?
2013-09-17 11:19 0PS:管理员同志, ... -
Java高级软件攻城狮,你在哪里?
2013-09-17 09:46 5创业一年,感触颇多,也走过一些弯路,不过总体上还好。 ... -
Java高级软件攻城狮,你在哪里?我们需要你....
2013-09-06 13:43 88创业一年,感触颇 ... -
实例分析Java Class的文件结构
2013-01-30 11:11 5128今天把之前 ... -
JDK 1.6.0_13 Jaxb的一个Bug
2011-05-10 16:50 2334项目中使用jaxb进行xml binding,但是在jdk1. ... -
Apache+PHP+Mysql的搭建
2010-08-05 19:29 1621以前都是用JAVA,PHP没用过,今天因为一些原因,需 ... -
JVM内存模型以及垃圾收集策略解析【续】
2010-02-22 20:00 7368今天接着补全上篇博文 ... -
JVM内存模型以及垃圾收集策略解析
2010-02-21 21:19 10030首先祝大家春节愉快,几个月前研究了一下JVM的内存模型,整理学 ... -
Java类加载器解析
2008-08-10 19:03 2247作者:狂放不羁 网址:http://yuquan-nana.i ... -
捕获checked exception后什么都不做的代价
2008-05-09 13:03 1734最近在做一个小项目,做到注册模块的时候,如果查询数据库后,发现 ... -
Three kinds of attributes in servlet
2008-03-02 00:21 1491There are three kinds of attrib ... -
My first Android programe!
2007-11-18 12:26 1388Today,i writed my first Android ... -
Java是剑客;.NET是刀客(转载)
2007-10-21 22:22 1470剑,一把好剑,重 ... -
高级语言发展简图
2007-09-30 15:35 1870C/C++语言谱系图 -
C#,C++ 与JAVA
2007-09-30 15:31 1719C#(C-Sharp)是Microsoft的新编程语言,被誉为 ... -
[转帖]利用Eclipse编辑中文资源文件
2007-09-09 03:57 4826如果经常使用Struts,并做过国际化操作的人来说,对于中文资 ... -
JAVA类加载器
2007-09-01 20:12 1732Java中加载器的种类大致可以分为四种:Bo ... -
JAVA类加载以及反射机制
2007-08-28 20:11 7412JAVA中类文件加载 ... -
小游戏
2007-08-28 16:48 1830偶前段时间写的小游戏。呵呵。。 -
今天起的早
2007-08-28 06:25 1275呵呵,今天早上很早就醒了。。记录一下这早起的早晨。
相关推荐
Java URL自定义私有网络协议是一项技术,允许开发者创建并使用自定义的协议与网络资源进行交互。在Java中,URL(Uniform Resource Locator)是一种特殊类型的URI(Uniform Resource Identifier),用于定位互联网上...
综上所述,通过Java的HttpClient库,可以在Eclipse环境中编写程序,实现从指定URL下载文件到本地的功能。通过理解HttpClient的工作原理和提供的API,开发者可以构建出稳定、高效的文件下载解决方案。
5. **协议引挚注册**:在Windows系统中,可以通过注册自定义URL协议,使得点击特定链接能启动本地程序。例如,`mailto:`协议用于启动邮件客户端,`tel:`协议用于拨打电话。 6. **安全与权限**:任何尝试从网页调用...
当然,实际应用中可能需要对URL进行更复杂的处理,比如检查其有效性、添加自定义标签文本等。但这个基本实现应该足以解决大多数基础需求。记住,使用正则表达式时要注意避免过度匹配或漏匹配,这可能需要根据具体...
在Java中,HTTPS访问涉及到`java.net.URL`,`java.net.HttpURLConnection`以及可能的`javax.net.ssl.SSLContext`和`TrustManager`类。 1. **配置SSL上下文**: 当你访问HTTPS站点时,Java默认的TrustStore可能不...
8. **Java网络编程API**:Java的java.net包包含了所有网络编程相关的类和接口,如InetAddress用于IP地址操作,URL和URI处理网络资源的标识,以及NNTP、SNMP等其他网络协议的实现。 9. **网络异常处理**:网络编程...
7. **优化和定制**:Java CEF提供了丰富的API,可以进行各种定制,如禁用某些特性、设置安全策略、添加自定义协议处理器等。 学习和理解Java CEF实例,有助于开发者深入掌握如何在Java应用中有效利用这一强大的工具...
在Java编程中,读取URL通常涉及到网络编程和文件I/O操作。这篇博客"Java读URL, 如Q日志"可能讲述了如何使用Java从指定的URL读取数据,特别是日志文件。在实际开发中,这可能是为了监控、分析或者处理远程服务器上的...
Java HTTPCore是一个重要的开源库,它是Apache HttpClient项目的一部分,专门用于处理HTTP协议的底层细节。这个库提供了核心的HTTP传输机制,使得开发者可以构建高效、灵活的HTTP客户端和服务器应用程序。HTTPCore的...
Java中的SSL(Secure Socket Layer)和HTTPS(Hypertext Transfer Protocol Secure)协议是网络通信安全的重要组成部分,尤其在处理敏感信息如用户登录凭证、支付数据等时,它们提供了必要的加密和身份验证机制。...
在Java编程语言中,`URL`(统一资源定位符)和`URLConnection`是网络编程中的核心类,用于访问和交互互联网上的资源。这篇博客文章可能深入解析了这两个类的使用和内部工作原理。 `URL`类是Java.net包中的一个关键...
在Java中,`java.net.URL`类提供了对这些部分的访问和操作,但有时它的功能可能不够全面,因此开发者会创建自定义的工具类来扩展其功能。 这个“整理后的url工具类”可能包含以下关键功能: 1. **URL构建**:允许...
在Java中,这些可以通过各种库或者自定义解析逻辑来实现。例如,对于JSON格式的数据,可以使用Jackson或Gson库进行解析。 在开发过程中,理解HTTP协议的原理和Java中处理HTTP的方法,对于构建网络应用至关重要。这...
本主题将详细讲解如何在Java环境下通过HTTPS协议来安全地调用Web Service接口,特别是在测试环境中。 首先,我们需要理解HTTPS的核心特性:它基于HTTP协议,但在数据传输层增加了SSL/TLS协议,提供了加密处理、...
总的来说,这个主题涵盖了Java编程中使用HTTPS URL连接的基础知识,涉及到SSL/TLS协议、Java的`java.net`和`javax.net.ssl`包,以及如何处理SSL上下文和证书验证。理解并正确实现这些概念对于开发安全的Web应用程序...
在Java编程中,当涉及到网络通信,特别是使用HTTPS协议与远程服务器进行数据交换时,可能会遇到各种问题,尤其是在处理包含中文字符的数据时。本篇文章将深入探讨如何使用`HttpsURLConnection`来正确地发送和接收...
Java应用需要设置回调地址,当钉钉服务器触发这些事件时,会将事件信息发送到指定的回调URL,应用接收到事件后进行相应的处理。 5. **错误处理与重试机制**:在对接过程中,可能会遇到网络问题或者API调用失败的...
在Java环境中实现WebSocket协议,开发者通常会利用Java API for WebSocket(JSR 356)或者第三方库,如WebSocket4J。WebSocket4J是一个轻量级的、易于使用的Java WebSocket框架,它提供了对WebSocket协议的全面支持...
在Java后台开发中,调试URL是一项重要的工作,它涉及到如何通过HTTP请求与服务器进行交互,获取或发送数据。从给出的示例中,我们可以提取出以下几个关键知识点: 1. **URL结构**: - URL(统一资源定位符)是访问...
`URLConnection`是Java API的一部分,它提供了连接到任意URL的能力,不仅限于HTTP或HTTPS,还包括FTP和其他网络协议。 1. **URL对象与URLConnection类** - **URL对象**:URL(Uniform Resource Locator)是统一...