JavaWeb - 小米商城:商品详情展示

11 篇文章 1 订阅
6 篇文章 0 订阅

JavaWeb - 小米商城 :商品详情展示

1. 功能描述

接上篇 JavaWeb - 小米商城 :首页商品分类展示本篇博客将分析和实现小米商城商品详情内容的查 询和展示。如以下H5页面所示:

在这里插入图片描述

2.功能分析

2.1 功能逻辑抽象

详情展示功能在逻辑上并不复杂:在商品列表界面每当点击商品 <img> 标签或商品名称时,都会向后端 提交一个 GET 请求来获取本商品数据内容。后端在收到请求后查询数据库并以 json 形式返回展示内 容。

查询商品详情内的功能需要面向数据库中的另一张表 tb_goods,为了区分不同类型的数据查询业务以及 代码的维护性和扩展性。在开发时基于三层架构体系建立对应的 GoodsServlet 类、GoodsService 接口 和实现类、GoodsDao 接口和实现类。

3.代码实现

3.1 前端

3.1.1 修改商品a链接地址

在这里插入图片描述

3.1.2 编写goodsDetail.html代码

前端在加载 <header> 内容时便向后端提交异步请求。在商品详情页根据传递过来的id,发出请求向 Servlet获取本商品json数据

html 的 <script>标签中定义以下jQuery代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>商品详情页</title>
    <link rel="stylesheet" type="text/css" href="css/login2.css">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/includeHeader.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var id = getParams("id");
            // alert(id)
            $.get("/goods.do?action=getGoodsDetailList", "id=" + id, function (result) {
                if (result.flag === true) {//登录
                    for (var i in result.data) {
                        var t= '      <ol class="breadcrumb">' +
                            '         <li><a href=" ">小米商城</a>/</li>' +
                            '        <li><a href="#">手机</a>/</li>' +
                            '        <li class="active"><a href="getGoodsListByTypeId?typeid=' + result.data[i].typeid + '">' + result.data[i].name + '</a></li>' +
                            '        </ol>' +
                            '      </div>';
                        $("#divT").append(t);
                        var temp = '  <div class="col-xs-6 col-md-6">' +
                            '    <a href="#" class="thumbnail">' +
                            '      <img src="/' + result.data[i].picture + '"  width="560" height="560"  alt="' + result.data[i].id + '" />' +
                            '    </a>' +
                            '  </div>' +
                            '  <div class="col-xs-6 col-md-6">' +
                            '<div class="panel panel-default" style="height: 560px">' +
                            ' <div class="panel-heading">商品详情</div>' +
                            '  <div class="panel-body">' +
                            '   <h3>产品名称:<small>' + result.data[i].name + '</small></h3>' +
                            '    <div style="margin-left: 10px;">' +
                            '   <p>市场价格:&nbsp;&nbsp;&nbsp;<span class="text-danger" style="font-size: 15px;">' + result.data[i].price + '</span>&nbsp;&nbsp;&nbsp;<span class="glyphicon glyphicon-yen"></span></p> ' +
                            '  <p>上市时间:&nbsp;&nbsp;&nbsp;' + result.data[i].pubdate + '</p>' +
                            '    <p>热销指数:&nbsp;&nbsp;&nbsp;';
                        var stTemp = "";
                        for (var j = 0; j <= result.data[i].star; j++) {
                            stTemp += '<img src="image/star_red.gif" alt="star"/>';
                        }
                        temp += stTemp;
                        temp +=
                            '</p>' +
                            '    <p>详细介绍:</p>' +
                            '    <p>&nbsp;&nbsp;' + result.data[i].intro + '</p>' +
                            '    <a href="${pageContext.request.contextPath}/addCart?goodsId=${goods.id}&price=${goods.price}" class="btn btn-warning">加入购物车&nbsp;&nbsp;&nbsp;<span class="glyphicon glyphicon-shopping-cart"></span></a>&nbsp;&nbsp;&nbsp;' +
                            '    <button class="btn btn-danger">直接购买</button>' +
                            '   </div>' +
                            ' </div>' +
                            '\</div>' +
                            '  </div>' +
                            '</div>'
                        $("#divD").append(temp);
                    }
                }
            });
        });
    </script>
</head>

<body>
<!--头部区域,通过js引入-->
<div id="headtop">
</div>
<div id="divT" style="margin: 0 auto;width: 90%;">
    </div>


<div id="divD" class="container">
    <div id="row" class="row">

    </div>
</div>
</div>
<!-- 底部 -->
<!--网站版权部分开始-->
<div id="seventh">
    <p id="sevep">小米商城|MIUI|米聊|多看书城|小米路由器|视频电话|小米天猫店|小米淘宝直营店|小米网盟|小米移动|隐私政策|Select Region</p>
    <p id="sevep">©mi.com 京ICP证110507号 京ICP备10046444号 京公网安备11010802020134号 京网文[2014]0059-0009号</p>
    <p id="sevep">违法和不良信息举报电话:185-0130-1238,本网站所列数据,除特殊说明,所有数据均出自我司实验室测试</p>
</div>
</body>
</html>

3.2 后端

3.2.1 Servlet

在 GoodsServlet 类中定义查询所有商品分类内容的主体逻辑

@WebServlet("/goods.do")
public class GoodsServlet extends BaseServlet {

    private ResultData resultData = new ResultData();
    
    //.............

    /**
     * 根据商品id返回goodsDetail.html
     */
    public String getGoodsListById(HttpServletRequest req, HttpServletResponse resp) {
        String id = req.getParameter("id");
        System.out.println("id:"+id);
        return Constants.REDIRECT + "/goodsDetail.html?id=" + id;
    }


    /**
     * 根据商品id返回商品详情json
     */
    public String getGoodsDetailList(HttpServletRequest req, HttpServletResponse resp) {
        String id = req.getParameter("id");
        IGoodsService service = new GoodsServiceImpl();
        resultData.setFlag(false);
        List<Goods> goods = service.getGoodsById(id);
        if (goods != null && goods.size() >= 1) {
            resultData.setFlag(true);
            resultData.setData(goods);
        }
        String json = JSON.toJSONString(resultData);
        System.out.println("id"+json);
        //在响应中声明返回的是json格式字符
        resp.setContentType("application/json;charset=utf-8");
        return json;
    }


3.2.2 Service

在 GoodsImpl 类中定义 getGoodsById 方法,定义商品详情内容的具体查询业务逻辑


/**
 * 商品业务层
 */

public class GoodsServiceImpl implements IGoodsService {
    private IGoodsDao goodsDao=new GoodsDaoImpl();
//......

    @Override
    public List<Goods> getGoodsById(String id) {
        List<Goods> goods=null;
        if (id !=null){
            goods=goodsDao.getGoodsById(id);//如果有则根据id查询
        }
        return goods;
    }

}

3.2.3 Dao

在 GoodsDaoImpl 类中定义 getGoodsById() 方法,操作数据库查询 tb_goods_type表中的所有内容

public class GoodsDaoImpl implements IGoodsDao {
    private QueryRunner queryRunner = null;

   //.................
    
    @Override
    public List<Goods> getAllDatas() {
        String sql = "select * from tb_goods where gstate=0";
        return queryBySql(sql);
    }

    @Override
    public List<Goods> queryBySql(String sql, Object... parms) {
        List<Goods> goods = null;
        QueryRunner qrun = new QueryRunner(DBUtils.getDataSource());
        try {
            goods = qrun.query(sql, parms, new BeanListHandler<>(Goods.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return goods;
    }

   /**
    * 根据id查询商品详情
    */
    @Override
    public List<Goods> getGoodsById(String id) {
        String sql = "select * from tb_goods where gstate=0 and id=?";
        return queryBySql(sql, id);
    }

}

后端程序执行顺利的话,返回的响应结果可以使用 Chrome浏览器的自动 json 解析功能观察到以下效 果.

在这里插入图片描述

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于引用[1]和引用提供的信息,可以介绍一下javaweb仿小米商城的实现方式。 1. 技术栈:该系统使用了Java作为后端开发语言,使用了Spring Boot框架进行快速开发,前后端分离采用了Vue.js作为前端发框架,数据库使用了MySQL,项目管理具使用了Maven,缓存使用了Redis。 2. 后端开发:后端采用了Spring Boot框架,使用了SSM(SpringMVC + Spring + MyBatis)作为持久层框架,通过Maven进行项目管理。后端主要负责处理前端请求,与数据库进行交互,实现商品管理、用户管理、订单管理等功能。 3. 前端开发:前端采用了Vue.js作为开发框架,通过Ajax与后端进行数据交互。前端主要负责展示商品信息、用户登录注册、购物车管理、订单生成等功能。 4. 数据库设计:使用MySQL作为数据库,设计商品表、用户表、订单表等相关表结构,通过MyBatis进行数据库操作。 5. 缓存管理:使用Redis作为缓存,提高系统性能和响应速度,常用的缓存数据包括商品信息、用户信息等。 6. 安全性:在用户登录注册、订单生成等关键操作中,采用了加密算法和安全验证机制,保证用户数据的安全性。 7. 部署和运维:使用Maven进行项目管理,通过Docker容器化部署,使用Nginx进行反向代理和负载均衡,保证系统的稳定性和可扩展性。 8. 其他功能:系统还可以实现商品搜索、商品推荐、购物车管理、订单支付等功能,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值