JavaWeb - 小米商城 :首页商品分类展示

1.功能描述

2.功能分析

分类展示功能在逻辑上并不复杂:每当需要加载 <header> 标签中的内容时,都会向后端提交一个 GET 请求来获取分类数据内容。后端在收到请求后查询数据库并以 json 形式返回展示内容。

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

3.代码实现

3.1 后端

3.1.1 Servlet

在 GoodsTypeServlet类中定义查询所有线路分类内容的主体逻辑

@WebServlet("/goodsType.do")
public class GoodsTypeServlet extends BaseServlet {private ResultData resultData = new ResultData();/*** 获取商品所有分类 返回json** @param req* @param resp* @return* @throws ServletException* @throws IOException*/public String goodsTypeAjax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {IGoodsTypeService service = new GoodsTypeServiceImpl();resultData.setFlag(false);List<GoodsType> lists = service.getGoodTypeByParent();if (lists != null && lists.size() >= 1) {resultData.setFlag(true);resultData.setData(lists);}String json = JSON.toJSONString(resultData);System.out.println(json);//在响应中声明返回的是json格式字符resp.setContentType("application/json;charset=utf-8");return json;}/*** 根据商品类别返回所有商品列表json列表** @param req* @param resp* @return* @throws ServletException* @throws IOException*/public String getGoodsListByTypeId(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String typeid = req.getParameter("typeid");IGoodsService service = new GoodsServiceImpl();resultData.setFlag(false);List<Goods> goods = service.getGoodsById(typeid);if (goods != null && goods.size() >= 1) {resultData.setFlag(true);resultData.setData(goods);}String json = JSON.toJSONString(resultData);System.out.println(json);//在响应中声明返回的是json格式字符resp.setContentType("application/json;charset=utf-8");return json;}
}

3.1.2 Service

在 GoodsTypeService 类中定义 GoodsTypeDaoImpl() 方法,定义旅游线路分类内容的具体查询业务逻辑

/*** 商品分类业务层*/
public class GoodsTypeServiceImpl implements IGoodsTypeService {private IGoodsTypeDao goodsTypeDao=new GoodsTypeDaoImpl(); //.....@Overridepublic List<GoodsType> getGoodTypeByParent() {List<GoodsType> goodsTypes=new ArrayList<>();List<GoodsType> goodsTypes1=goodsTypeDao.getAllDatas();if (goodsTypes1!=null){for (GoodsType gt:goodsTypes1){if (gt.getParent()==0){//从总的分类数据中做筛选goodsTypes.add(gt);}}return goodsTypes;}return null;}
}

3.1.3 Dao

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

public class GoodsTypeDaoImpl implements IGoodsTypeDao {private QueryRunner queryRunner = null;public GoodsTypeDaoImpl() {queryRunner = new QueryRunner();}//..... @Overridepublic List<GoodsType> getAllDatas() {String sql = "select * from tb_goods_type ";return queryBySql(sql, null);}@Overridepublic List<GoodsType> queryBySql(String sql, Object... parms) {List<GoodsType> goodsTypes = null;QueryRunner qrun = new QueryRunner(DBUtils.getDataSource());try {goodsTypes = qrun.query(sql, parms, new BeanListHandler<>(GoodsType.class));} catch (SQLException e) {e.printStackTrace();}return goodsTypes;}
}

3.2 前端

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

前端在加载 <header> 内容时便向后端提交异步请求。在 header.html 的 <script> 标签中定义以下 jQuery 代码:

      //获取商品类别的$.ajax({url: "goodsType.do?action=goodsTypeAjax",type: "GET",dataType: "json",success: function (result) {for (var i in result.data) {var a = $("<a href='goodsType.do?action=getGoodsListByTypeId&typeid=" + result.data[i].id + "'>" + result.data[i].name + "</a>");$("#goodsType").append(a);}},error: function () {// alert("失败");}}

4.点击分类展示分类商品

4.1功能逻辑描述

点击分类a链接跳转到Servlet中重定向操作,将typeid传递到该页面;

该页面以Ajax方式请求Servlet获取Json数据, 并将对应的数据在前端显示

4.2代码实现

4.2.1 Servlet

@WebServlet("/goods.do")
public class GoodsServlet extends BaseServlet {private ResultData resultData = new ResultData();/*** 根据商品类别返回getGoodsListByType.html** @param req* @param resp* @return*/public String getGoodsListByTypeId(HttpServletRequest req, HttpServletResponse resp)  {String typeid = req.getParameter("typeid");return Constants.REDIRECT + "/getGoodsListByType.html?typeid="+typeid;}/*** 根据商品类别返回所有商品列表json列表** @param req* @param resp* @return*/public String getGoodsList(HttpServletRequest req, HttpServletResponse resp)  {String typeid = req.getParameter("typeid");IGoodsService service = new GoodsServiceImpl();resultData.setFlag(false);List<Goods> goods = service.getGoodsById(typeid);if (goods != null && goods.size() >= 1) {resultData.setFlag(true);resultData.setData(goods);}String json = JSON.toJSONString(resultData);System.out.println(json);//在响应中声明返回的是json格式字符resp.setContentType("application/json;charset=utf-8");return json;}
}

4.2.2 Service

/*** 商品业务层*/public class GoodsServiceImpl implements IGoodsService {private IGoodsDao goodsDao=new GoodsDaoImpl();//.....@Overridepublic List<Goods> getGoodsById(String typeid) {List<Goods> goods=null;if (typeid==null){goods=goodsDao.getGoodsDatas(10);//如果没有给分类  提供前10条商品数据}else {goods=goodsDao.getGoodsByTypeId(typeid);//如果有则根据typeid查询}return goods;}
}

4.2.3 Dao

public class GoodsDaoImpl implements IGoodsDao {private QueryRunner queryRunner = null;public GoodsDaoImpl() {queryRunner = new QueryRunner();}//....@Overridepublic List<Goods> getAllDatas() {String sql = "select * from tb_goods where gstate=0";return queryBySql(sql);}@Overridepublic 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;}/*** 根据数量查询数据* @param num* @return*/@Overridepublic List<Goods> getGoodsDatas(int num) {String sql = "select * from tb_goods where gstate=0 limit 0,?";return queryBySql(sql, num);}@Overridepublic List<Goods> getGoodsByTypeId(String typeid) {String sql = "select * from tb_goods where gstate=0 and typeid=?";return queryBySql(sql, typeid);}}

4.3 前端代码

getGoodsListByType.html
//....
<script type="text/javascript">$(document).ready(function () {var typeid = getParams("typeid");//获取用户登录状态的$.get("/goods.do?action=getGoodsList", "typeid=" + typeid, function (result) {if (result.flag === true) {//登录for (var i in result.data) {var temp = '<div class="col-sm-3">\n' +'                    <div class="thumbnail">' +'                        <img src="/' + result.data[i].picture + '" width="180" height="180"alt="小米6"/>' +'                        <div class="caption">' +'                            <h4>商品名称<a href="getGoodsById?id=' + result.data[i].id + '">' + result.data[i].name + '</a></h4>' +'<p>热销指数';var stTemp = "";for (var j = 0; j <= result.data[i].star; j++) {stTemp += '<img src="data:image/star_red.gif" alt="star"/>';}temp += stTemp;temp += '                            </p>' +'                            <p>上架日期:' + result.data[i].pubdate + '</p>' +'                            <p style="color:orange">价格:' + result.data[i].price + '</p>' +'                        </div>' +'                    </div>' +'                </div>';$("#dataDiv").append(temp);}}});});</script>//.....

JavaWeb - 小米商城 :首页商品分类展示相关推荐

  1. 首页商品分类展示——淘淘商城(十四)

    需求 分析 总结 Service层 Controller层 需求 分析 前端通过jsonp跨域调用服务层的服务,获得包含商品分类信息,并使用回到函数显示分类信息.注意,该出直接使用 $.getJSON ...

  2. 淘淘商城(前台系统,展示商城首页,商品分类展示)

    1.前台系统和后台系统的关系 2.前台系统的搭建 3.服务端工程的搭建 3.1 创建工程 3.2 使用到的技术 3.3 配置工程 3.3.1 pom.xml 3.3.2 web.xml 3.3.3 框 ...

  3. JavaWeb - 小米商城:商品添加到购物车

    JavaWeb - 小米商城:商品添加到购物车 1.功能描述 接上篇 JavaWeb - 仿小米商城(5):商品详情展示 本篇博客将分析和实现小米商城商品添加到购物车 和展示.如以下H5页面所示: 2 ...

  4. JavaWeb - 小米商城:登录与退出

    JavaWeb - 小米商城:登录与退出 1. 业务描述 接上篇小米商城:用户注册,本篇博客将分析和实现用户登录与退出.登录是后台获取当前访客身份的方式,也是提供个性化服务的基础. 执行登录时:用户在 ...

  5. django实现商品分类展示

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 django实现商品分类展示 前言 一.什么是django框架? 二.使用步骤 1.创建django项目应用 2.配置文件 3.创建m ...

  6. Django项目实战——5—(用户登录、首页用户名展示、项目阶段总结)

    1.用户登录 用户名登录逻辑分析 用户名登录接口设计 请求方式 请求参数:表单 响应结果:HTML 用户名登录逻辑实现 用户后端验证视图文件apps/users/views.py "&quo ...

  7. 21- vue django restful framework 打造生鲜超市 -首页商品分类显示功能

    Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 线上演示地址: http://vueshop.mtianyan.cn/ github源代码 ...

  8. 首页数据展示前端页面

    首页数据展示前端页面 1.首页前端实现 1.1.封装api请求,用户调用后端接口 1.1.1.创建api文件夹,创建/api/hosp/hosp.js 1.1.2.创建/api/cmn/dict.js ...

  9. python电商项目-首页广告展示

    首页广告展示 实现首页轮播图广告 快讯广告 一楼(手机) 二楼(电脑数码) 三楼(家居家装)广告页面展示 {"index_lbt":[{"id":1, &quo ...

最新文章

  1. 图像质量损失函数SSIM Loss的原理详解和代码具体实现
  2. js 日期时间的格式化
  3. Numpy:利用Numpy库建立可视化输入的二次函数数据点集np.linspace+np.random.shuffle+np.random.normal
  4. MFC中动态创建控件以及事件响应实现方法
  5. 求组合数的算法 java,求一个整数的组合数算法(java)
  6. python垃圾回收价格表_深度解析Python垃圾回收机制(超级详细)
  7. 5.Excel日期时间函数类应用
  8. VC++6.0 单步调试
  9. Android Service 详解一:概述
  10. 方法Method(Java)
  11. 英寸和厘米的交互python_Python新手尝试编写厘米到英寸的代码,反之亦然
  12. Terminator the Sara Conner Chronicles
  13. 热身赛T3(奖学金评定)
  14. AT89C51单片机制作密码锁,真的很详细了
  15. 浏览器主页被360/2345等劫持
  16. 基于ARM核心板实现的BMS可行性方案
  17. java 解密pdf_Java 加密和解密 PDF
  18. tmux还有这种操作,我在这边的窗口上操作,你那边可以实时的看到我的操作,厉害了...
  19. 《经理人常犯的11种错误》观后感
  20. 鲜花电商狼烟四起,花点时间的“悦己”生意还能香多久?

热门文章

  1. 移动网流量用户身份识别系统的源代码_护照阅读器识别身份证、护照、港澳通行证 、军官证...
  2. Linux删除文件,df查看磁盘空间未减少
  3. 虚拟机安装SSH报错解决办法
  4. python创建多个文件夹合并_在python中如何将多个文件夹合并到一个文件夹中?
  5. 猫眼电影Top100爬取
  6. PHP网站修改简体字,修改了一个很不错的php验证码(支持中文)
  7. 45个python入门案例_4牛-三博股票学习网
  8. 浏览器页面渲染机制-前端原理剖析
  9. 步步精心,打造高德 AR 实景步行导航(设计篇)
  10. 数学中奇妙的“金蝉脱壳”(转)