获得URL的方法
URI.toURL()
File.toURL()
ClassLoader.getSystemResource(String name)
Applet.getDocumentBase()
URL有以下5部分组成
http://www.ibiblio.org/javafaq/books/jnp/index.html?isbn=12345#toc
协议,也称模式 http
授权机构 www.ibiblio.org
路径 javafaq/books/jnp/index.html
查询字符串 isbn=12345
片段标识符,也成为段或ref toc
授权机构可被进一步分为用户信息(包含口令)、主机、端口
admin:pwd@www.blackstar.com:8080
URL编码解码
URLEncoder不会去判断这些字符如何用于URL,比如 = & 表示查询参数,因此必须将URL逐部分进行编码
URLDecoder不涉及非转义字符,所以可以传递整个URL,而不用将其分解。
public class URLEncoderExample {
public static void main(String[] args) throws UnsupportedEncodingException {
String input = "http://www.altavista.com/cgi-bin/query?pg=q&kl=XX&stype=stext&q=+\"Java Network Programming\"";
System.out.println(input);
String output = URLEncoder.encode(input, "utf-8");
System.out.println(output);
String s = URLEncoder.encode("http", "utf-8");
s += "://";
s += URLEncoder.encode("www.altavista.com", "utf-8");
s += "/";
s += URLEncoder.encode("cgi-bin", "utf-8");
s += "/";
s += URLEncoder.encode("query", "utf-8");
s += "?";
s += URLEncoder.encode("pg", "utf-8");
s += "=";
s += URLEncoder.encode("q", "utf-8");
s += "&";
s += URLEncoder.encode("kl", "utf-8");
s += "=";
s += URLEncoder.encode("XX", "utf-8");
s += "&";
s += URLEncoder.encode("stype", "utf-8");
s += "=";
s += URLEncoder.encode("stext", "utf-8");
s += "&";
s += URLEncoder.encode("q", "utf-8");
s += "=";
s += URLEncoder.encode("\"Java Network Programming\"", "utf-8");
System.out.println(s);
}
}
URL和URI
URL对象是从网络获取的应用程序协议的表示,而URI对象纯粹是可以解析和操作的字符串。
URI没有网络获取功能,URL有字符串解析方法getFile() getRef(),处理URL返回的字符串,分解为各个部分。
// URLSplitter
try {
URL u = new URL("http://xace:pwd@www.ibiblio.org/javafaq/books/jnp/index.html?isbn=12345#toc");
System.out.println("The URL is " + u);
System.out.println("The scheme/protocol is " + u.getProtocol());
System.out.println("The user info is " + u.getUserInfo());
String host = u.getHost();
if (host != null) {
int atSign = host.indexOf('@');
if (atSign != -1)
host = host.substring(atSign + 1);
System.out.println("The host is " + host);
} else {
System.out.println("The host is null.");
}
System.out.println("The port is " + u.getPort());
System.out.println("The defaultPort is " + u.getDefaultPort());
System.out.println("The path is " + u.getPath());
System.out.println("The file is " + u.getFile());
System.out.println("The ref is " + u.getRef());
System.out.println("The query string is " + u.getQuery());
System.out.println("The authority is:" + u.getAuthority());
} catch (MalformedURLException ex) {
System.err.println("is not a URL I understand.");
}
// URISplitter
try {
URI u = new URI("http://xace:pwd@www.ibiblio.org/javafaq/books/jnp/index.html?isbn=12345#toc");
System.out.println("The URI is " + u);
if (u.isOpaque()) {
System.out.println("This is an opaque URI.");
System.out.println("The scheme is " + u.getScheme());
System.out.println("The scheme specific part is " + u.getSchemeSpecificPart());
System.out.println("The fragment ID is " + u.getFragment());
} else {
System.out.println("This is a hierarchical URI.");
System.out.println("The scheme is " + u.getScheme());
try {
u = u.parseServerAuthority();
System.out.println("The host is " + u.getUserInfo());
System.out.println("The user info is " + u.getUserInfo());
System.out.println("The port is " + u.getPort());
} catch (URISyntaxException ex) {
System.out.println("The authority is " + u.getAuthority());
}
System.out.println("The path is " + u.getPath());
System.out.println("The query string is " + u.getQuery());
System.out.println("The fragment ID is " + u.getFragment());
}
} catch (URISyntaxException ex) {
System.err.println(" does not seem to be a URI.");
}
URI的各部分
模式、模式的有部分、片段标识符
scheme:scheme-specific-part:fragment
代理
设置HTTP代理
// java.oreilly.com和xml.oreilly.com,不使用代理
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "9000");
System.setProperty("http.nonProxyHosts", "java.oreilly.com|xml.oreilly.com");
java -Dhttp.proxyHost=192.168.5.1 -Dhttp.proxyPort=9000 -Dhttp.nonProxyHosts=*.oreilly.com aaa.bbb.Class
相应的有FTP代理和Socks代理,但是Socks代理不能设置nonProxyHosts
Proxy类 ProxySelector类
cookie
Java1.5之前,只能通过直接操作HTTP首部来设置cookie,
Set-Cookie: user=xace
新版本的cookie规范,在“name=value”对后,需要一个版本属性,还允许将cookie值引号引起来,这样在引号中可以包含空格
Set-Cookie2: food="chocolate ice cream"; Version=1
当相同服务器请求同一文档时,客户端在发送给服务器的请求的Cookie首部字段中回显次cookie,
Cookie: user=xace
Cookie: $Version=1; food="chocolate ice cream"
客户端的任务就是记住收到的所有cookie,在适当的时候将正确的cookie发送给最初的服务器。
但是这有些复杂,因为cookie有一些表示属性
过期时间 Expires=Wed, 21-Dec-2010 15:23:00 GMT Max-Age=3600
路径 Path=/blog
域 Domain=.iteye.com
端口 Port="80 8080"
安全性选项 secure
这些属性往服务器回传时,均要加上$Expires $Path
分享到:
相关推荐
对java网络编程里的URL、URI研究,如果需要我也可以将研究上篇传上来
总结起来,URI、URL和URN在Java网络编程中扮演着重要角色。理解它们的区别和使用方法是构建网络应用程序的基础。`java.net`包提供的`URI`和`URL`类为开发人员提供了方便的接口来处理这些标识符,而`URLConnection`则...
无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...
网络编程还涉及到URL(统一资源定位符)、URI(统一资源标识符)和URLConnection。URL是访问网络资源的完整地址,而URI是资源的抽象标识。`java.net.URL`类用于解析和操作URL,`URLConnection`则用于打开并访问URL...
Java网络编程是Java开发中的重要领域,它涵盖了各种网络通信技术,包括TCP和UDP套接字编程、URL和URI的理解以及如何实现一个实用的下载程序。让我们深入探讨这些主题。 首先,TCP(传输控制协议)是一种面向连接的...
[奥莱理] Java 网络编程 第4版 (英文版) [奥莱理] Java Network Programming 4th Edition (E-Book) ☆ 图书概要:☆ This practical guide provides a complete introduction to developing network programs ...
在网络编程中,理解URL、URI和URLConnection的概念也至关重要。URL(统一资源定位符)是互联网上的资源地址,而URI(统一资源标识符)更广泛地用于标识任何类型的资源。URLConnection类是Java访问网络资源的主要方式...
Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,包括TCP/IP协议、套接字(Socket)编程、HTTP协议、HTTPS安全通信等。这些知识点对于任何想要构建分布式系统、网络应用或者进行服务器...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书重点介绍了JDK 1.4和1.5(即J2SE 5)中的网络API更新,包括TCP和UDP socket、服务器socket、URL和URI处理、组播、以及特殊用途的API如JavaMail。它不仅讲解API,还通过丰富的示例代码展示了API的实际应用,涉及...
1. `URL`和`URI`:Java提供`URL`和`URI`类来处理网络资源的定位。`URI`是一个抽象的标识符,而`URL`是具有定位资源能力的URI。`URL`类提供了`openStream()`方法,可以直接从远程站点获取资源内容,返回一个`...
无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...
《Java网络编程 3rd》不仅涵盖了Java网络编程的基础理论知识,还提供了大量的实例代码和最佳实践建议。通过阅读本书,读者不仅可以掌握Java网络编程的核心技术,还能了解到该领域的最新发展动态和技术趋势。无论是...
本书内容全面涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章集涉及到TCP和UDP socket 、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
Java网络编程的核心概念包括套接字(Sockets)、服务器套接字(ServerSockets)、输入/输出流(Input/Output Streams)以及URL和HTTP协议的处理。下面我们将详细探讨这些关键知识点: 1. **套接字(Sockets)**:套...
在第三版中,作者更新了内容以适应不断发展的Java技术和网络环境,使得读者能够学习到最新的实践和标准。 Java网络编程的核心是Socket编程,这是建立网络应用程序的基础。书中详细讲解了Java的Socket类和...
..Java网11络编程之URI、URL研究专题1.docx
..Java网11络编程之URI、URL研究专题1.pdf
在Java编程领域,网络编程是不可或缺的一部分,尤其是在构建分布式系统、服务器端应用或者网络通信工具时。本资源“Java网络高级编程”是一个401页的详细教程,旨在帮助开发者深入理解和掌握Java在网络编程中的高级...
本书内容全面,涵盖了从网络基础知识到远程方法调用(rmi)等各方面的内容,书中章节涉及到tcp和udp socket、服务器socket、url和uri、组播以及特殊用途的api(如javamail)等等。本书展示了如何使用jsse编写安全的...