2021-04-18 11:30  阅读(100)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-network-tcp-server.html

Java网络教程 - Java URL

绝对URI具有以下通用格式:

scheme:scheme-specific-part

scheme-specific-part取决于scheme

例如,httpscheme使用一种格式,并且mailtoscheme使用另一种格式。

URI的另一个通用形式如下,它表示一个URL。

    scheme://<authority><path>?<query>#<fragment>
    

scheme访问资源的方法。

它是协议名称,如http,ftp等。

URI中的schemepath部分是必需的。所有其他部分均为可选。

path部分可以是空字符串。权限部分指示服务器名称或IP地址。

如果权限部分表示服务器名称,则它可以是userinfo @ host:port的形式。

例如,标识本地文件系统中的文件的URL使用文件方案作为file:///c:/documents/java.doc

URL

URI语法在其path部分中使用分层语法。

path的多个部分由正斜杠(/)分隔。

query部分指示通过执行指定的查询获得资源。

它由名称 - 值对组成,用&符号分隔。

名称和值由等号=分隔。

例如,id = 123& num = 5是一个查询,它有两个部分,id和num。id的值为123,num的值为5。

fragment部分标识辅助资源,通常是子集由URI的另一部分标识的主资源。

下面是一个URI的例子,它也被分成几部分:

    URI:        //www.w3cschool.cn/java/a.html?id=123#abc
    Scheme:     http 
    Authority:  www.w3cschool.cn 
    Path:       /java/a.html 
    Query:      id=123
    Fragment:   abc
    

要在URI中使用空格字符,请使用%20,这是空格的转义形式。

使用%25表示URI中的%字符。

例如,要在查询中使用5.2%的值

    //www.w3cschool.cn/details?rate=5.2%25
    

Java URI类

Java表示一个URI和一个URL作为对象。

它提供以下四个类,您可以使用它们将URI和URL用作Java程序中的对象:

    java.net.URI
    java.net.URL
    java.net.URLEncoder
    java.net.URLDecoder
    

以下代码创建一个URI对象。

    URI baseURI  = new URI("http://www.www.w3cschool.cn");
    

要创建具有相对URI字符串的URI,并使用baseURI解析它

    URI baseURI  = new URI("http://www.www.w3cschool.cn");
    URI relativeURI = new URI("welcome.html");
    URI resolvedRelativeURI = baseURI.resolve(relativeURI);
    

完整代码

    import java.net.URI;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        String baseURIStr = "http://www.www.w3cschool.cn/a/b/c/index.html?id=1&rate=5%25#foo";
        String relativeURIStr = "../x/y/z/welcome.html";
    
        URI baseURI = new URI(baseURIStr);
        URI relativeURI = new URI(relativeURIStr);
    
        URI resolvedURI = baseURI.resolve(relativeURI);
    
        printURIDetails(baseURI);
        printURIDetails(relativeURI);
        printURIDetails(resolvedURI);
      }
      public static void printURIDetails(URI uri) {
        System.out.println("URI:" + uri);
        System.out.println("Normalized:" + uri.normalize());
        String parts = "[Scheme=" + uri.getScheme() + ", Authority="
            + uri.getAuthority() + ", Path=" + uri.getPath() + ", Query:"
            + uri.getQuery() + ", Fragment:" + uri.getFragment() + "]";
        System.out.println(parts);
        System.out.println();
      }
    }
    

上面的代码生成以下结果。

202104181132_1.png

我们可以使用它的toURL()方法从URI对象中获取一个URL对象,如下所示:

    URL  baseURL = baseURI.toURL();
    

例2

演示java.net.URL类的使用的示例类

    import java.net.URL;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        String baseURLStr = "http://www.ietf.org/rfc/rfc3986.txt";
        String relativeURLStr = "rfc2732.txt";
        URL baseURL = new URL(baseURLStr);
        URL resolvedRelativeURL = new URL(baseURL, relativeURLStr);
        System.out.println("Base URL:" + baseURL);
        System.out.println("Relative URL  String:" + relativeURLStr);
        System.out.println("Resolved Relative URL:" + resolvedRelativeURL);
      }
    }
    

上面的代码生成以下结果。

202104181132_2.png

URLEncoder和URLDecoder

URLEncoder和URLDecoder类分别用于对字符串进行编码和解码。

    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        String source = "index&^%*a test for 2.5% and  &";
        String encoded = URLEncoder.encode(source, "utf-8");
        String decoded = URLDecoder.decode(encoded, "utf-8");
        System.out.println("Source: " + source);
        System.out.println("Encoded: " + encoded);
        System.out.println("Decoded: " + decoded);
    
      }
    }
    

上面的代码生成以下结果。

202104181130_3.png

例3

访问URL的内容

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    
    public class Main {
      public static String getURLContent(String urlStr) throws Exception {
        BufferedReader br = null;
        URL url = new URL(urlStr);
        InputStream ins = url.openStream();
        br = new BufferedReader(new InputStreamReader(ins));
    
        StringBuilder sb = new StringBuilder();
        String msg = null;
        while ((msg = br.readLine()) != null) {
          sb.append(msg);
          sb.append("\n"); // Append a new line
        }
        br.close();
        return sb.toString();
      }
    
      public static void main(String[] args) throws Exception {
        String urlStr = "http://www.w3cschool.cn";
        String content = getURLContent(urlStr);
        System.out.println(content);
      }
    }
    

上面的代码生成以下结果。202104181130_4.png

例4

向/从URL写入/读取数据的URL读取器/写入器类。

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Map;
    
    public class Main {
      public static String getURLContent(String urlStr)
          throws Exception {
        URL url = new URL(urlStr);
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);
        connection.connect();
        OutputStream ous = connection.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ous));
        bw.write("index.html");
        bw.flush();
        bw.close();
    
        printRequestHeaders(connection);
        InputStream ins = connection.getInputStream();
    
        BufferedReader br = new BufferedReader(new InputStreamReader(ins));
        StringBuffer sb = new StringBuffer();
        String msg = null;
        while ((msg = br.readLine()) != null) {
          sb.append(msg);
          sb.append("\n"); // Append a new line
        }
        br.close();
        return sb.toString();
      }
      public static void printRequestHeaders(URLConnection connection) {
        Map headers = connection.getHeaderFields();
        System.out.println(headers);
      }
      public static void main(String[] args) throws Exception {
        String urlStr = "http://www.www.w3cschool.cn";
        String content = getURLContent(urlStr);
        System.out.println(content);
      }
    }
    

上面的代码生成以下结果。

202104181130_5.png

Jar URLConnection

以下代码显示了如何获取JarURLConnection对象。

使用其方法来获取JAR特定数据。

    String str = "jar:http://yoursite.com/my.jar!/my/Abc.class"; 
    URL  url = new URL(str);
    JarURLConnection  connection = (JarURLConnection)url.openConnection();
    
点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java URL
上一篇
Java 网络UDP多播
下一篇
Java 非阻塞套接字