细说 URLConnection

在java网络编程里面URLConnection是个非常重要的类,有了它就可以实现大部分的网络编程。

URL 和 URLConnection的联系和区别?

  1. urlConnection 提供了比url更多的功能。如果你想从网上下载一个图片、请求一个网页,那么使用url这个类已经完全够用了,因为他提供了openStream()方法获取一个输入流,你就可以得到你想得到的资源了,但是如果出了想获取内容外还想提交一个表单,那url就无能为力了,因为他只读不写。
  1. urlConnection 提供了读取响应头的功能。出了可以读取到响应体,他还可以读取响应的头信息
  2. urlconnection 提供了发送发送数据的功能。比如你要提交一个表单。
  3. urlConnection 在请求的时候,提供了更多的控制选项,比如可以

控制是否可写,
是否 允许交互,
是否使用缓存,
设置底层socket的超时时间,
配置请求的首部

如何获取URLConnection 对象?

URLConnection 是个抽象类,也没有public的构造方法,唯一获取的方式是

  1. 首先new 一个url对象
  1. 使用url对象的 getConnection()得到URLConnection 对象

HttpURLConnection 到底牛逼在哪?

HttpURLConnection 是URLConnection的抽象子类,其实我们使用url.getConnection()得到的类就是一个HttpURLConnection对象,这个对象提供了比URLConnection 对象更多好用的方法。
控制请求的方法。可以通过 setRequestMethod()来设置请求的方法,GET POST HEAD PUT DELETE OPTIONS TRACE

主动断开连接。默认情况下URLConnection使用的是keep-alive ,服务器在发送完了最后一个字节(-1)后不会立即关闭连接,如果在次发起请求,会重用底层的socket连接。使用disconnect()方法就可以显示的关闭连接,关闭连接的使用会关闭流,但是关闭流不会关闭这个socket连接

得到响应状态码和消息行。提供了方法getResponseCode和getRespoonseMessage方法来获取状态码好的消息行

控制url 重定向 。默认情况下,如果返回30x的状态码,H团体票Urlconnection会自动的重定向。但是可以通过setFollowRedirects来设置是否允许自动重定向

查看使用了代理。如果中间经过了代理服务器,userProxy方法返回true。

几个常用的http方法

  1. GET POST 就不说了
  1. HEAD ,相当于get,但是不反回正文部分,只返回请求头部分
    3.OPTIONS, 这个方法可以得到服务端到底支持那些个http方法。
    4.TRACE, 如果中间经过了代理服务器,代理服务器可能修改了一些首部,这个方法返回服务器最终接收到的首部是怎样的,这样你就可以知道中间的代理服务器做了那些手脚
    5.PUT/DELETE 这些方法顾名思义。但是最终还要依赖于服务端的实现,一般我们在servlet中并没有写这些方法,那么实际上是没有用的。

请求头:content-length,java是如何计算的呢?

java并不是读取一个字节就立即发送到服务器,他是现在整个资源都放在了缓冲里,计算完了长度后在发送的,所以他比较适合发送比较小得表单,对于特别大得表单往往表现不佳。

你可能感兴趣的:(细说 URLConnection)