网址处理(URL Processing)
URL代表统一资源定位符,表示万维网上的资源,例如网页或FTP目录。
本节介绍如何编写与URL通信的Java程序。 URL可以分解为多个部分,如下所示 -
protocol://host:port/path?query#ref
协议示例包括HTTP,HTTPS,FTP和文件。 该路径也称为文件名,主机也称为权限。
以下是协议为HTTP的网页的URL -
https://www.amrood.com/index.htm?language=en#j2se
请注意,此URL未指定端口,在这种情况下,将使用协议的默认端口。 使用HTTP,默认端口为80。
URL类方法
java.net.URL类表示一个URL,并具有一组完整的方法来操作Java中的URL。
URL类有几个用于创建URL的构造函数,包括以下内容 -
Sr.No. | 方法和描述 |
---|---|
1 | public URL(String protocol, String host, int port, String file) throws MalformedURLException 通过将给定部分放在一起来创建URL。 |
2 | public URL(String protocol, String host, String file) throws MalformedURLException 与前一个构造函数相同,只是使用了给定协议的默认端口。 |
3 | public URL(String url) throws MalformedURLException 根据给定的String创建一个URL。 |
4 | public URL(URL context, String url) throws MalformedURLException 通过一起解析URL和String参数来创建URL。 |
URL类包含许多用于访问所表示的URL的各个部分的方法。 URL类中的一些方法包括以下内容 -
Sr.No. | 方法和描述 |
---|---|
1 | public String getPath() 返回URL的路径。 |
2 | public String getQuery() 返回URL的查询部分。 |
3 | public String getAuthority() 返回URL的权限。 |
4 | public int getPort() 返回URL的端口。 |
5 | public int getDefaultPort() 返回URL协议的默认端口。 |
6 | public String getProtocol() 返回URL的协议。 |
7 | public String getHost() 返回URL的主机。 |
8 | public String getHost() 返回URL的主机。 |
9 | public String getFile() 返回URL的文件名。 |
10 | public String getRef() 返回URL的引用部分。 |
11 | public URLConnection openConnection() throws IOException 打开与URL的连接,允许客户端与资源通信。 |
例子 (Example)
以下URLDemo程序演示了URL的各个部分。 在命令行中输入URL,URLDemo程序输出给定URL的每个部分。
// File Name : URLDemo.java
import java.net.*;
import java.io.*;
public class URLDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.amrood.com/index.htm?language=en#j2se");
System.out.println("URL is " + url.toString());
System.out.println("protocol is " + url.getProtocol());
System.out.println("authority is " + url.getAuthority());
System.out.println("file name is " + url.getFile());
System.out.println("host is " + url.getHost());
System.out.println("path is " + url.getPath());
System.out.println("port is " + url.getPort());
System.out.println("default port is " + url.getDefaultPort());
System.out.println("query is " + url.getQuery());
System.out.println("ref is " + url.getRef());
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序的示例运行将产生以下结果 -
输出 (Output)
URL is https://www.amrood.com/index.htm?language=en#j2se
protocol is http
authority is www.amrood.com
file name is /index.htm?language=en
host is www.amrood.com
path is /index.htm
port is -1
default port is 80
query is language=en
ref is j2se
URLConnections类方法
openConnection()方法返回一个java.net.URLConnection ,一个抽象类,其子类代表各种类型的URL连接。
例如 -
如果连接到协议为HTTP的URL,则openConnection()方法返回HttpURLConnection对象。
如果连接到表示JAR文件的URL,则openConnection()方法返回JarURLConnection对象等。
URLConnection类有许多方法可用于设置或确定有关连接的信息,包括以下内容 -
Sr.No. | 方法和描述 |
---|---|
1 | Object getContent() 检索此URL连接的内容。 |
2 | Object getContent(Class[] classes) 检索此URL连接的内容。 |
3 | String getContentEncoding() 返回content-encoding头字段的值。 |
4 | int getContentLength() 返回content-length头字段的值。 |
5 | String getContentType() 返回content-type头字段的值。 |
6 | int getLastModified() 返回上次修改的头字段的值。 |
7 | long getExpiration() 返回过期的标头字段的值。 |
8 | long getIfModifiedSince() 返回此对象的ifModifiedSince字段的值。 |
9 | public void setDoInput(boolean input) 传入true表示连接将用于输入。 默认值为true,因为客户端通常从URLConnection读取。 |
10 | public void setDoOutput(boolean output) 传入true表示连接将用于输出。 默认值为false,因为许多类型的URL不支持写入。 |
11 | public InputStream getInputStream() throws IOException 返回URL连接的输入流,以便从资源中读取。 |
12 | public OutputStream getOutputStream() throws IOException 返回用于写入资源的URL连接的输出流。 |
13 | public URL getURL() 返回此URLConnection对象所连接的URL。 |
例子 (Example)
以下URLConnectionDemo程序连接到从命令行输入的URL。
如果URL表示HTTP资源,则连接将转换为HttpURLConnection,并且资源中的数据一次读取一行。
// File Name : URLConnDemo.java
import java.net.*;
import java.io.*;
public class URLConnDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.amrood.com");
URLConnection urlConnection = url.openConnection();
HttpURLConnection connection = null;
if(urlConnection instanceof HttpURLConnection) {
connection = (HttpURLConnection) urlConnection;
}else {
System.out.println("Please enter an HTTP URL.");
return;
}
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String urlString = "";
String current;
while((current = in.readLine()) != null) {
urlString += current;
}
System.out.println(urlString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序的示例运行将产生以下结果 -
输出 (Output)
$ java URLConnDemo
.....a complete HTML content of home page of amrood.com.....