ssm(Spring、Springmvc、Mybatis)实战之淘淘商…

2019-05-08 07:33:10来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

文章大纲

一、课程介绍
二、今日内容简单介绍
三、Httpclient介绍与实战
四、项目源码与资料下载
五、参考文章

 

一、课程介绍

一共14天课程
(1)第一天:电商行业的背景。淘淘商城的介绍。搭建项目工程。Svn的使用。
(2)第二天:框架的整合。后台管理商品列表的实现。分页插件。
(3)第三天:后台管理。商品添加。商品类目的选择、图片上传、富文本编辑器的使用。
(4)第四天:商品规格的实现。
(5)第五天:商城前台系统的搭建。首页商品分类的展示。Jsonp。
(6)第六天:cms系统的实现。前台大广告位的展示。
(7)第七天:cms系统添加缓存。Redis。缓存同步。
(8)第八天:搜索功能的实现。使用solr实现搜索。
(9)第九天:商品详情页面的展示。
(10)第十天:单点登录系统。Session共享。
(11)第十一天:购物车订单系统的实现。
(12)第十二天:nginx。反向代理工具。
(13)第十三天:redis集群的搭建、solr集群的搭建。系统的部署。
(14)项目总结。

二、今日内容简单介绍

  第五天时候,我们已经把淘淘商城的门户系统、服务系统创建、启动并正常访问,那么今天我们将把门户系统、服务系统的相关业务逻辑进行编写,功能包括首页的动态实现、CMS 内容管理、首页大广告等内容,下面主要讲解Httpclient使用,其他的具体业务逻辑编写,请在参考资料下载中进行学习。

三、Httpclient介绍与实战

1. 什么是httpclient

  HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 下载地址:http://hc.apache.org/

2. 功能介绍

以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等

3. 代码实战

3.1 导入依赖

        <!-- httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.5</version>
        </dependency>

3.2 无参的GET请求

public class DoGET {

    public static void main(String[] args) throws Exception {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http GET请求
        HttpGet httpGet = new HttpGet("http://www.baidu.com/");

        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("内容长度:" + content.length());
//                FileUtils.writeStringToFile(new File("C:\\baidu.html"), content);
            }
        } finally {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        }

    }

}

3.3 带参数的get请求

public class DoGETParam {

    public static void main(String[] args) throws Exception {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 定义请求的参数
        URI uri = new URIBuilder("http://www.baidu.com/s").setParameter("wd", "java").build();

        System.out.println(uri);

        // 创建http GET请求
        HttpGet httpGet = new HttpGet(uri);

        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            }
        } finally {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        }

    }

}

3.4 不带参数的post请求

public class DoPOST {

    public static void main(String[] args) throws Exception {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http POST请求
        HttpPost httpPost = new HttpPost("http://www.oschina.net/");

        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpclient.execute(httpPost);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            }
        } finally {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        }

    }

}

3.5 带参数的post请求

public class DoPOSTParam {

    public static void main(String[] args) throws Exception {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http POST请求
        HttpPost httpPost = new HttpPost("http://www.oschina.net/search");

        // 设置2个post参数,一个是scope、一个是q
        List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
        parameters.add(new BasicNameValuePair("scope", "project"));
        parameters.add(new BasicNameValuePair("q", "java"));
        // 构造一个form表单式的实体
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
        // 将请求实体设置到httpPost对象中
        httpPost.setEntity(formEntity);

        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpclient.execute(httpPost);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            }
        } finally {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        }

    }

}

3.6 封装HttpClient通用工具类
在taotao-common项目中,导入maven依赖后,新建HttpClientUtil.java

package com.taotao.common.utils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * 定义网络请求相关内容
 * 
 * @author Administrator
 *
 */
public class HttpClientUtil {

    /**
     * 带集合参数的get请求
     * @param url
     * @param param
     * @return
     */
    public static String doGet(String url, Map<String, String> param) {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        String resultString = "";
        
        CloseableHttpResponse response = null;
        
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            
            if (param != null) {
                
                for (String key : param.keySet()) {
                    
                    builder.addParameter(key, param.get(key));
                    
                }
            }
            
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);

            // 执行请求
            response = httpclient.execute(httpGet);
            
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
                
            }
            
        } catch (Exception e) {
            
            e.printStackTrace();
            
        } finally {
            
            try {
                
                if (response != null) {
                    
                    response.close();
                }
                
                httpclient.close();
                
            } catch (IOException e) {
                
                e.printStackTrace();
                
            }
        }
        
        return resultString;
    }

    /**
     * 不带参数的get请求
     */
    public static String doGet(String url) {
        
        return doGet(url, null);
        
    }

    /**
     * 带集合参数的post请求
     * @param url
     * @param param
     * @return
     */
    public static String doPost(String url, Map<String, String> param) {
        
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        
        CloseableHttpResponse response = null;
        
        String resultString = "";
        
        try {
            
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            
            // 创建参数列表
            if (param != null) {
                
                List<NameValuePair> paramList = new ArrayList<NameValuePair>();
                
                for (String key : param.keySet()) {
                    
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                    
                }
                
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                
                httpPost.setEntity(entity);
                
            }
            
            // 执行http请求
            response = httpClient.execute(httpPost);
            
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            
        } catch (Exception e) {
            
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 不带参数的get请求
     */
    public static String doPost(String url) {
        
        return doPost(url, null);
        
    }
    
    /**
     * 带json字符串参数的post请求
     * 
     * @param url
     * @param json
     * @return
     */
    public static String doPostJson(String url, String json) {
        
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            
            // 创建请求内容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            
            httpPost.setEntity(entity);
            
            // 执行http请求
            response = httpClient.execute(httpPost);
            
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }
}

3.7 HttpClient的使用
在taotao-portal项目的ContentServiceImpl.java中进行使用

package com.taotao.portal.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.utils.HttpClientUtil;
import com.taotao.pojo.TbContent;
import com.taotao.portal.service.ContentService;

@Service
public class ContentServiceImpl implements ContentService {
    
    @Value("${SERVICE_BASE_URL}")
    private String SERVICE_BASE_URL ;
    @Value("${INDEX_AD1_URL}")
    private String INDEX_AD1_URL ;

    @Override
    public List<TbContent> getContentList(long categoryId) {
        //调用服务层的服务
        String resStr = HttpClientUtil.doGet(SERVICE_BASE_URL + INDEX_AD1_URL + categoryId);
        //把字符串转换成java对象
        TaotaoResult result = TaotaoResult.formatToList(resStr, TbContent.class);
        if (result.getStatus() == 200) {
            List<TbContent> listContent = (List<TbContent>) result.getData();
            return listContent;
        }
        return null;
    }

}

四、项目源码与资料下载

链接:https://pan.baidu.com/s/1Q8HP8l_2WxWAGFrCptHg0w
提取码:iuq5

五、参考文章

http://yun.itheima.com/course?hm


原文链接:https://www.cnblogs.com/WUXIAOCHANG/p/10823883.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:LeetCode 69 题

下一篇:前端的百度地图的api的使用