Java URL 处理

说明

Java URL setURLStreamHandlerFactory(URLStreamHandlerFactory) 方法设置应用程序的 URLStreamHandlerFactory。该方法在给定的 Java 虚拟机中最多可以调用一次。 URLStreamHandlerFactory 实例用于根据协议名称构造流协议处理程序。如果有安全管理器,此方法首先调用安全管理器的 checkSetFactory 方法以确保允许该操作。这可能会导致 SecurityException。

声明

以下是 java.net.URL.setURLStreamHandlerFactory(URLStreamHandlerFactory) 方法的声明

public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) 

参数

fac - 所需的工厂。

返回值

异常

Error - 如果应用程序已经设置了工厂。

SecurityException - 如果安全管理器存在并且其 checkSetFactory 方法不存在不允许该操作。

示例 1

以下示例显示如何使用 Java URLConnection setURLStreamHandlerFactory() 方法获取 https 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 URLConnection 实例。使用 setURLStreamHandlerFactory() 方法,我们将 contentHandlerFactory 设置为 null 以查看影响,然后使用 getInputStream(),我们获取网站主页的内容并打印相应的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("https://www.yxjc123.com/index.htm?language=en#j2se");
         URLConnection.setContentHandlerFactory(null);
         URLConnection urlConnection = url.openConnection();

         BufferedReader in = new BufferedReader(
            new InputStreamReader(urlConnection.getInputStream()));
         String content = "";
         String current;
         while((current = in.readLine()) != null) {
            content += current;
         }
         System.out.println(content);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
} 

让我们编译并运行上面的程序,这将产生以下结果 -

输出

<!DOCTYPE html><html lang="en"><head>	<title>Online Tutorials, Courses, and eBooks ....</body></html> 

示例 2

以下示例显示了 Java URLConnection 的用法setURLStreamHandlerFactory() 方法用于使用 http 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 URLConnection 实例。使用 setURLStreamHandlerFactory() 方法,我们将 contentHandlerFactory 设置为 null 以查看影响,然后使用 getInputStream(),我们获取网站主页的内容并打印相应的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("http://www.yxjc123.com/index.htm?language=en#j2se");

         URLConnection urlConnection = url.openConnection();
         URLConnection.setContentHandlerFactory(null);
         BufferedReader in = new BufferedReader(
            new InputStreamReader(urlConnection.getInputStream()));
         String content = "";
         String current;
         while((current = in.readLine()) != null) {
            content += current;
         }
         System.out.println(content);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
} 

让我们编译并运行上面的程序,这将产生以下结果 -

输出

<!DOCTYPE html><html lang="en"><head>	<title>Online Tutorials, Courses, and eBooks ....</body></html> 

示例 3

以下示例显示了 Java URLConnection 的用法setURLStreamHandlerFactory() 方法用于使用 http 协议的 baidu 的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 URLConnection 实例。使用 setURLStreamHandlerFactory() 方法,我们将 contentHandlerFactory 设置为 null 以查看影响,然后使用 getInputStream(),我们获取网站主页的内容并打印相应的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("http://www.baidu.com");
         URLConnection.setContentHandlerFactory(null);
         URLConnection urlConnection = url.openConnection();

         BufferedReader in = new BufferedReader(
            new InputStreamReader(urlConnection.getInputStream()));
         String content = "";
         String current;
         while((current = in.readLine()) != null) {
            content += current;
         }
         System.out.println(content);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
} 

让我们编译并运行上面的程序,这将产生以下结果 -

输出

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" ....</body></html>