Java获取URL对应的资源

简介:
认识IP、认识URL是进行网络编程的第一步。java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。
 
一、认识URL
 
类  URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
 
简单的可以把URL理解为包含:协议、主机名、端口、路径、查询字符串和参数等对象。每一段可以独立设置。
 
应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。
 
相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。
 
由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。
 
注意, URI  类在某些特定情况下对其组成字段执行转义。建议使用  URI  管理 URL 的编码和解码,并使用  toURI()  和  URI.toURL()  实现这两个类之间的转换。
 
也可以使用  URLEncoder 和  URLDecoder 类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。
(以上介绍来自Java API doc)
 
二、URL对象的构建
 
方式很多,可以看看API文档。
 
三、获取URL指定的资源
 
下面给个例子,说明如何获取到指定的资源。
import java.io.*; 
import java.net.URL; 
import java.net.URLConnection; 

public  class TestURL { 
         public  static  void main(String[] args)  throws IOException { 
                test4(); 
                test3(); 
                test2(); 
                test(); 
        } 

         /** 
         * 获取URL指定的资源。 
         * 
         * @throws IOException 
         */
 
         public  static  void test4()  throws IOException { 
                URL url =  new URL( "http://lavasoft.blog.51cto.com/attachment/200811/200811271227767778082.jpg"); 
                //获得此 URL 的内容。 
                Object obj = url.getContent(); 
                System.out.println(obj.getClass().getName()); 
        } 

        /** 
         * 获取URL指定的资源 
         * 
         * @throws IOException 
         */
 
        public static void test3() throws IOException { 
                URL url = new URL("http://www.hrtsea.com/down/soft/45.htm"); 
                //返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。 
                URLConnection uc = url.openConnection(); 
                //打开的连接读取的输入流。 
                InputStream in = uc.getInputStream(); 
                int c; 
                while ((c = in.read()) != -1) 
                        System.out.print(c); 
                in.close(); 
        } 

        /** 
         * 读取URL指定的网页内容 
         * 
         * @throws IOException 
         */
 
        public static void test2() throws IOException { 
                URL url = new URL("http://www.hrtsea.com/down/soft/45.htm"); 
                //打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。 
                Reader reader = new InputStreamReader(new BufferedInputStream(url.openStream())); 
                int c; 
                while ((c = reader.read()) != -1) { 
                        System.out.print((char) c); 
                } 
                reader.close(); 
        } 

        /** 
         * 获取URL的输入流,并输出 
         * 
         * @throws IOException 
         */
 
        public static void test() throws IOException { 
                URL url = new URL("http://lavasoft.blog.51cto.com/62575/120430"); 
                //打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。 
                InputStream in = url.openStream(); 
                int c; 
                while ((c = in.read()) != -1) 
                        System.out.print(c); 
                in.close(); 
        } 
}
 
四、Java所支持的URL类型
 
类型很多,通过下面这个工具可以测试,这个类来自 [url]http://www.java2s.com/Tutorial/Java/0320__Network/ProtocolTester.htm[/url]
 
import java.net.URL; 

public  class MainClass { 

         public  static  void main(String[] args) { 

                String host =  "www.java2s.com"
                String file =  "/index.html"

                String[] schemes = { "http""https""ftp""mailto""telnet""file""ldap""gopher"
                                 "jdbc""rmi""jndi""jar""doc""netdoc""nfs""verbatim""finger""daytime"
                                 "systemresource"}; 

                 for ( int i = 0; i < schemes.length; i++) { 
                         try { 
                                URL u =  new URL(schemes[i], host, file); 
                                System.out.println(schemes[i] +  " is supported\r\n"); 
                        }  catch (Exception ex) { 
                                System.out.println(schemes[i] +  " is not supported\r\n"); 
                        } 
                } 
        } 
}
 
另外,还可以通过协议处理器自定义协议。

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/120445,如需转载请自行联系原作者
相关文章
|
20天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
48 4
|
10天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
33 9
|
10天前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
33 7
|
20天前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
49 2
|
10天前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
27 11
|
10天前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
38 9
|
10天前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
31 5
|
30天前
|
存储 网络协议 前端开发
在 Java 中如何完全验证 URL
在 Java 中如何完全验证 URL
77 8
|
7天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
2月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
45 0