java中的URLConnection

时间:2023-03-09 02:10:05
java中的URLConnection

*URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。

*url.openConnection()方法返回的肯定是这两个子类中的一个,这是java多态性的一种体现

*按图索骥。。。在eclipse中按几次F3
  1、找到openConnection()方法。
  2、找到URL中的handler实例。注:handler是抽象类URLStreamHandler一个定义了的未实例化类。
  3、handler  =(URLStreamHandler)cls.newInstance();。
  4、cls = cl.loadClass(clsName);
    ①cl为系统类加载器
    ②claName是由前面的sun.security.action.GetPropertyAction等方法组成的。
  5、找不到GetPropertyAction的源代码了,不过猜测clsName指向一个API,这个API至少应该覆盖
    ①、URLConnection的connect方法
    ②、URLStreamHandler的openConnection方法
  注:handlers为handler储存集合,factory为自定义handler。(看到这部分的,可以再探讨下)

*可以直接把URLConnection强制转化为HTTPURLConnection,这样一来就可以把urlConnection.setDoOutput(true)写成httpURLConnection.setRequestMethod("post"),实际上,后者调用前者。如果非得要使用URLConnection的输入流就必须执行setDoOutput(true)

*urlConnection.getInputStream()会调用urlConnection.connect()函数。