前言
一个商城,比如最为人熟知的淘宝和京东,一定会给用户提供一个最基本的功能,即商品搜索功能,首页最上面那个醒目的搜索栏就是了。那么,问题来了,手机客户端app的商品搜索功能的业务逻辑和PC端的业务逻辑是一样的吗?想都不用想,肯定是一样的,你总不能说在手机客户端app搜商品时,输入苹果关键字搜索出来了一个苹果手机,而在PC端以相同的关键字进行搜索,搜索出来的是一件T恤吧!如果果真是这样,那不是见鬼了吗?
既然手机客户端app的商品搜索功能的业务逻辑和PC端的业务逻辑是一样的,那么你有没有想过,手机客户端app是怎么来查询数据的呢?就拿笔者之前做过的一个淘淘商城项目来说(该项目的传送门是一个淘淘商城项目送给你,愿你有一个灿烂的前程!),手机客户端和PC端访问搜索系统的流程图如下所示。
不管是在手机客户端或者PC端,我们都可以使用HttpClient来模拟浏览器并发送请求,然后接收服务端返回的响应(一般都会返回JSON)。
这里我还得说一下,HttpClient不仅可以提供给手机客户端调用并返回JSON,还可以和其他的系统进行通信。
HttpClient简介
HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它还支持HTTP协议最新的版本和建议。
HttpClient提供的主要功能有如下四个:
其实,我们之前所学的SolrJ就封装了HttpClient,下图就是实证。
快速入门HttpClient
学前须知
在学习HttpClient之前,咱们得知道HTTP协议的响应状态码一共有哪些,下图我已列出了所有的响应状态码。
哇!这么多响应状态码啊!难道以上罗列出的这些响应状态码我都得知道吗,或者说就硬死记硬背下来,其实大可不必这样,这样有点费力不讨好。对于有点开发经验的Java后端开发程序员来说,他一定会碰到一些常见的响应状态码,我们平常开发遇到的也就是这些常见的响应状态码了。
其次,本次学习HttpClient,咱们是基于HttpClient 4.3.5这个版本来学习的。
最后,为了更加方便于大家学习HttpClient,我在下方提供了一个maven工程,大家以该工程来学习即可。
链接:https://pan.baidu.com/s/1hm-sv4w99qWtcy5Lka6bDw,提取码:tv1e
无参数的GET请求
你有没有想过,你平时是如何来访问百度的啊?是不是得遵循下面三个步骤啊:
- 第一步,打开浏览器
- 第二步,在浏览器地址栏中输入url,例如
www.baidu.com
- 第三步,按回车键,发出请求
那么我们如何来使用HttpClient模拟浏览器发送请求,并接收服务端返回的响应呢?看下面代码便一目了然了。
带参数的GET请求
在笔者之前做过的淘淘商城项目中,进入该商城后台管理系统中去查询商品时,按住F12键,便能清楚地看到向服务器发送的请求了,包括请求的url、请求的参数以及请求的方式,如下图所示。
以上是使用谷歌浏览器看到的效果,那么问题又来了,我们如何来使用HttpClient模拟浏览器发送带参数的GET请求,并接收服务端返回的响应呢?看看下面这个类的代码,你便知道了。
package com.itheima.httpclient;
import java.net.URI;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class DoGETParam {
public static void main(String[] args) throws Exception {
// 创建HttpClient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
// 定义请求的参数
URI uri = new URIBuilder("http://localhost:8081/item/list"