Java 什么是URL?及URL类和URLConnection类 ゝ一纸荒年。 2021-12-12 17:25 230阅读 0赞 在 [Java][] 的 API 中的 java.net 包中包含一个 URL 类和一个 URLConnection 类。下面介绍这两个类的相关知识。 ## URL 概念 ## URL 是统一资源定位符(Uniform Resource Locator)的简称,它表示 Internet 上某一资源的地址。通过 URL 用户可以访问各种网络资源,比如常见的 WWW 以及 FTP 站点。浏览器可以通过解析给定的 URL 在网络上查找相应的文件或其他资源。 URL 的语法格式如下所示。 protocol://resourceName 协议名(protocol)指明获取资源所使用的传输协议,如 HTTP、FTP 和 file 等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。下面是一些简单的 URL 示例。 1. http://www.sun.com/ 协议名://主机名 2. http://localhost:8080/Test/admin/login.jsp 协议名://机器名:端口号/文件名 ## URL 类 ## 在 java.net 包中包含专门用来处理 URL 的类 URL,可以获得 URL 的相关信息,例如 URL 的协议名和主机名等。下面分别对它的构造方法和常用方法进行介绍。 URL 的构造方法如表 1 所示。 <table> 表1 URL 的构造方法 <tbody> <tr> <th>构造方法</th> <th>说明</th> </tr> <tr> <td>public URL (String spec)</td> <td>通过一个表示 URL 地址的字符串可以构造一个 URL 对象。</td> </tr> <tr> <td>public URL(URL context,String spec)</td> <td>使用基本地址和相对 URL 构造一个 URL 对象。</td> </tr> <tr> <td>public URL(String protocol,String host,String file)</td> <td>使用指定的协议、主机名和文件名创建一个 URL 对象。</td> </tr> <tr> <td>public URL(String protocol,String host,int port,String file)</td> <td>使用指定的协议、主机名、端口号和文件名创建一个 URL 对象。</td> </tr> </tbody> </table> URL 的常用方法如表 2 所示。 <table> 表2 URL 的常用方法 <tbody> <tr> <th>方法</th> <th>说明</th> </tr> <tr> <td>public String getProtocol()</td> <td>获取该 URL 的协议名。</td> </tr> <tr> <td>public String getHost()</td> <td>获取该 URL 的主机名。</td> </tr> <tr> <td>public int getPort()</td> <td>获取该 URL 的端口号,如果没有设置端口,返回 -1。</td> </tr> <tr> <td>public String getFile()</td> <td>获取该 URL 的文件名。</td> </tr> <tr> <td>public String getRef()</td> <td>获取该 URL 在文件中的相对位置。</td> </tr> <tr> <td>public String getQuery()</td> <td>获取该 URL 的查询信息。</td> </tr> <tr> <td>public String getPath()</td> <td>获取该 URL 的路径。</td> </tr> <tr> <td>public String getAuthority()</td> <td>获取该 URL 的权限信息。</td> </tr> <tr> <td>public String getUserInfo()</td> <td>获得使用者的信息。</td> </tr> <tr> <td>public String getRef()</td> <td>获得该 URL 的锚点。</td> </tr> </tbody> </table> ## URLConnection 类 ## 完成了 URL 的定义,接下来就可以获得 URL 的通信连接。在 java.net 包中,定义了专门的 URLConnection 类来表示与 URL 建立的通信连接,URLConnection 类的对象使用 URL 类的 openConnection() 方法获得。 URLConnection 类的主要方法如表 3 所示。 <table> 表3 URLConnection 类的主要方法 <tbody> <tr> <th>方法</th> <th>说明</th> </tr> <tr> <td>void addRequestProperty(String key,String value)</td> <td>添加由键值对指定的一般请求属性。key 指的是用于识别请求的关键字<br> (例如 accept),value 指的是与该键关联的值。</td> </tr> <tr> <td>void connect()</td> <td>打开到此 URL 所引用的资源的通信链接(如果尚未建立这样的链接)。</td> </tr> <tr> <td>Object getConnection()</td> <td>检索此 URL 链接的内容。</td> </tr> <tr> <td>InputStream getInputStream()</td> <td>返回从此打开的链接读取的输入流。</td> </tr> <tr> <td>OutputStream getOutputStream()</td> <td>返回写入到此链接的输出流。</td> </tr> <tr> <td>URL getURL()</td> <td>返回此 URLConnection 的 URL 字段的值。</td> </tr> </tbody> </table> 例 1 使用 URL 和 URLConnection 类获取与百度首页的链接并将其页面信息输出到控制台,主要步骤如下所示。 (1) 创建一个类,编写 main() 方法,在该方法中创建一个 URL 对象,然后传入参数“http://www.baidu.com/”,输出 URL 的相关信息,代码如下所示。 1. package ch16; 2. import java.io.IOException; 3. import java.io.InputStream; 4. import java.net.URL; 5. import java.net.URLConnection; 6. public class URLDemo 7. \{ 8. public static void main(String\[\] args) 9. \{ 10. try 11. \{ 12. URL url=new URL("http://www.baidu.com/"); 13. System.out.println("协议:" + url.getProtocol()); 14. System.out.println("主机:" + url.getHost()); 15. System.out.println("端口:" + url.getPort()); 16. InputStream in; 17. \} 18. catch(IOException e) 19. \{ 20. //TODO 自动生成的 catch 块 21. e.printStackTrace(); 22. \} 23. \} 24. \} (2) 在 main() 方法的 try 模块中继续添加代码,获得 URLConnection 对象,通过输入流读取页面源代码并将信息输出到控制台,代码如下所示。 1. URLConnection uc=url.openConnection(); 2. in=uc.getInputStream(); 3. byte\[\] b=new byte\[1024\]; 4. int len; 5. while((len=in.read(b))!=-1) 6. \{ 7. System.out.println(new String(b,0,len)); 8. \} 9. in.close(); (3) 运行程序,执行结果如下所示。 协议:http 主机:www.baidu.com 端口:-1 <!DOCTYPE html> <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/......<img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html> ## 提取 URL 协议名称 ## 我们知道 URL 中必须有一个协议名称,常用的协议有 HTTP、HTTPS 和 FTP 等。本实例将允许用户输入一个 URL,然后从中提取出协议名称。 实例代码如下: 1. package ch16; 2. import java.net.MalformedURLException; 3. import java.net.URL; 4. import java.util.Scanner; 5. public class URLDemo1 6. \{ 7. public static void main(String\[\] args) 8. \{ 9. try 10. \{ 11. Scanner scan=new Scanner(System.in); //创建输入扫描器 12. System.out.println("请输入一个完整的网址:"); 13. String line=scan.nextLine(); //获取用户输入文本 14. URL url=new URL(line); //创建URL对象 15. System.out.println("这个网址的主机名称是:"+url.getHost()); //获取主机名称 16. System.out.println("这个网址的URL协议名称是:"+url.getProtocol()); //获取协议名称 17. \} 18. catch(MalformedURLException e) 19. \{ 20. System.out.println("输入的是非法网址"); //提示错误信息 21. \} 22. \} 23. \} 如上述代码所示,在创建一个 URL 类对象之后调用 getHost() 方法获取主机名称,调用 getPmtocol() 方法获取协议名称。实例运行结果如下所示。 请输入一个完整的网址: http://www.baidu.com 这个网址的主机名称是:www.baidu.com 这个网址的URL协议名称是:http 请输入一个完整的网址: ftp://www.baidu.com/seo 这个网址的主机名称是:www.baidu.com 这个网址的URL协议名称是:ftp [Java]: http://c.biancheng.net/java/
还没有评论,来说两句吧...