23.(1)URL类的其中一个构造方法如: public URL(String protocol,String host,int port,String file,URLStreamHandler handler)其实URL类的每个构造方法都可引发MalformedURLException异常。
(2)URL类的只有调用openConnection方法去调用它的URLStreamHandler(协议处理器)的 openConnection方法返回一个URLCOnnection对象,利用这个对象才能访问网络资源的内容。
(3)URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory fac)静态方法在java虚拟机中最多只能调用一次,并且这个方法的调用在创建任何URL类实例对象前。设置完后当创建URL类的实例对象时java虚拟机会根据其中出现的协议名调用URLStreamHandlerFactory类的createURLStreamHandler(String protocol)方法创建一个与这个协议名对应的协议处理器。当createURLStreamHandler(String protocol)方法返回的结果为NULL或者没有通过方法setURLStreamHandlerFactory(URLStreamHandlerFactory fac)设置时,java虚拟机会根据里面保存的对照表自动装载协议名对应的协议处理器,如果找不到URL构造方法就会抛出MalformedURLException异常。
(4)在URLConnection连接URL网络资源之前可以调用setRequestProperty方法来设置HTTP协议的各个请求消息头内容,当URLConnection对象调用Connection方法与远程资源建立连接以后,URLConnection对象就可以调用各种get方法读取远程资源的内容。如getHeaderFields方法可以读取HTTP服务器回送的所有响应消息头。URL对象已经与远程资源建立网络连接,应用程序就不能再调用URLConnection对象的设置连接参数与请求属性方法了,如果继续调用Connection方法也会被忽略,因为已经建立了连接。创建URLConnection对象时并没有与远程资源建立底层连接,但当没有建立连接时调用URLConnection类中的一些get方法时,那么这些方法就会自动调用Connection方法与远程资源建立连接。getInputStream和getOutputStream方法分别返回HTTP响应实体内容的InputStream对象和写入HTTP请求消息的OutPutStream对象。
(5)每个HttpURLConnection实例对象只能用于一次对话请求,就是只能向服务器发送一次请求和得到服务器一次响应结果。但是应用程序与HTTP服务器之间建立的底层网络连接可以被多个HttpURLConnection实例对象共享,这样就可以充分利用HTTP 1.1的持续连接的特性。调用HttpURLConnection中的InputStream或者OutputStream流对象的close方法只能关闭相应HttpURLConnection对象的相关网络资源,不会影响到那个共享连接。调用HttpURLConnection的disconnect方法可以关闭底层共享网络。 |
|