HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源。 HTTPClient提供的主要功能:1、实现了所有HTTP的方法(GET、POST、等PUT、HEAD); 2、支持自动转向; 3、支持HTTPS协议; 4、支持代理服务器等。使用HttpClient需要以下6个步骤:创建HttpClient的实例创建某种连接方法的实例,GetMethod/PostMethod。在 GetMethod/PostMethod的构造函数中传入待连接的地址调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例读response释放连接。无论执行方法是否成功,都必须释放连接对得到后的内容进行处理
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法, 能够大大提高客户端的编写效率。调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求, 可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。ClientHttpRequestFactory接口主要提供了两种实现方式, 一种是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接, 还有一种方式是使用HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息
URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。另外一个重要的类是URL, 通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。每个HttpURLConnection实例都可用于生成单个请求, 但是其他实例可以透明地共享连接到HTTP服务器的基础网络。请求后在HttpURLConnection的InputStream或OutputStream上调用close()方法可以释放与此实例关联的网络资源, 但对共享的持久连接没有任何影响。如果在调用disconnect()时持久连接空闲,则可能关闭基础套接字。任何网络连接都需要经过socket才能连接,HttpURLConnection不需要设置socket, 所以,HttpURLConnection并不是底层的连接,而是在底层连接上的一个请求。 这就是为什么HttpURLConneciton只是一个抽象类,自身不能被实例化的原因。 HttpURLConnection只能通过URL.openConnection()方法创建具体的实例。虽然底层的网络连接可以被多个HttpURLConnection实例共享,但每一个HttpURLConnection实例只能发送一个请求。请求结束之后,应该调用HttpURLConnection实例的InputStream或OutputStream的close()方法以释放请求的网络资源,不过这种方式对于持久化连接没用。对于持久化连接,得用disconnect()方法关闭底层连接的socket。