今日任务

  • 完成分类模块的功能
  • 完成商品模块的功能

1.1      分类模块的功能:

1.1.1    查询分类的功能:

1.1.2    查询分类的代码实现:

1.1.2.1  创建表:

  1. CREATE TABLE `category` (
  2.  
  3. `cid` varchar(32) NOT NULL,
  4.  
  5. `cname` varchar(20) DEFAULT NULL,
  6.  
  7. PRIMARY KEY (`cid`)
  8.  
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.1.2.2  功能实现:

1.直接查询所有分类:

  1. CategoryDao categoryDao = new CategoryDaoImpl();
  2.  
  3. List<Category> list = categoryDao.findAll();

2.异步加载分类:

  1. $(function() {
  2.  
  3. $.post("/store_v2.0/CategoryServlet", {
  4.  
  5. "method" : "findAll"
  6.  
  7. }, function(data) {
  8.  
  9. $.each(data, function(i, n) {
  10.  
  11. $("#menu").append("<li><a href='#'>" + n.cname + "</a></li>");
  12.  
  13. });
  14.  
  15. }, "json");
  16.  
  17. });

3.使用缓存技术:对程序进行优化.

* 缓存:其实就是内存中的一块空间.可以使用缓存将数据源中的数据拿到,存入到内存中.后期获得数据的话 从缓存中进行获得.

* Memcache   :

* EHCache :是Hibernate常使用的二级缓存的插件.

* Redis      :

* 使用ehcache:

* 引入jar包:

* 引入配置文件:

  1. // 业务层查询所有分类的方法:
  2.  
  3. public List<Category> findAll() throws SQLException {
  4.  
  5. /*
  6.  
  7. * CategoryDao categoryDao = new CategoryDaoImpl(); return
  8.  
  9. * categoryDao.findAll();
  10.  
  11. */
  12.  
  13. /**
  14.  
  15. * 从缓存中查询数据:
  16.  
  17. * * 有数据,直接将缓存的数据返回.
  18.  
  19. * * 如果没有,查询数据库,数据存入到缓存中.
  20.  
  21. */
  22.  
  23. List<Category> list = null;
  24.  
  25. // 从缓存中进行查询:
  26.  
  27. CacheManager cacheManager = CacheManager
  28.  
  29. .create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));
  30.  
  31. Cache cache = cacheManager.getCache("categoryCache");
  32.  
  33. Element element = cache.get("list");
  34.  
  35. if(element != null){
  36.  
  37. // 缓存中有数据:
  38.  
  39. System.out.println("缓存中有数据...");
  40.  
  41. list = (List<Category>) element.getObjectValue();
  42.  
  43. }else{
  44.  
  45. // 缓存中没有数据:
  46.  
  47. System.out.println("缓存中没有数据...");
  48.  
  49. CategoryDao categoryDao = new CategoryDaoImpl();
  50.  
  51. list = categoryDao.findAll();
  52.  
  53. Element e = new Element("list", list);
  54.  
  55. // cache.
  56.  
  57. cache.put(e);
  58.  
  59. }
  60.  
  61. return list;
  62.  
  63. }

1.2      前台页面上的商品显示:

1.2.1    商品显示准备工作:

1.2.1.1  创建表:

  1. CREATE TABLE `product` (
  2.  
  3. `pid` varchar(32) NOT NULL,
  4.  
  5. `pname` varchar(50) DEFAULT NULL,
  6.  
  7. `market_price` double DEFAULT NULL,
  8.  
  9. `shop_price` double DEFAULT NULL,
  10.  
  11. `pimage` varchar(200) DEFAULT NULL,
  12.  
  13. `pdate` datetime DEFAULT NULL,
  14.  
  15. `is_hot` int(11) DEFAULT NULL,-- 1:热门
  16.  
  17. `pdesc` varchar(255) DEFAULT NULL,
  18.  
  19. `pflag` int(11) DEFAULT NULL,-- 1:下架
  20.  
  21. `cid` varchar(32) DEFAULT NULL,
  22.  
  23. PRIMARY KEY (`pid`),
  24.  
  25. KEY `sfk_0001` (`cid`),
  26.  
  27. CONSTRAINT `sfk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
  28.  
  29. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.2.1.2  创建类:

1.2.2    首页上的热门商品的显示和最新商品的显示

  1. ProductService productService = new ProductServiceImpl();
  2.  
  3. try {
  4.  
  5. // 查询热门商品:
  6.  
  7. List<Product> hotList = productService.findByHot();
  8.  
  9. // 查询最新商品:
  10.  
  11. List<Product> newList = productService.findByNew();
  12.  
  13. req.setAttribute("hotList",hotList);
  14.  
  15. req.setAttribute("newList",newList);
  16.  
  17. } catch (SQLException e) {
  18.  
  19. e.printStackTrace();
  20.  
  21. throw new RuntimeException();
  22.  
  23. }

1.2.3    商品详情的显示

  1. public String findById(HttpServletRequest req,HttpServletResponse resp){
  2.  
  3. // 接收参数:
  4.  
  5. String pid = req.getParameter("pid");
  6.  
  7. // 调用业务层:
  8.  
  9. ProductService productService = new ProductServiceImpl();
  10.  
  11. try {
  12.  
  13. Product product = productService.findById(pid);
  14.  
  15. req.setAttribute("product",product);
  16.  
  17. } catch (SQLException e) {
  18.  
  19. e.printStackTrace();
  20.  
  21. throw new RuntimeException();
  22.  
  23. }
  24.  
  25. // 页面跳转
  26.  
  27. return "/jsp/product_info.jsp";
  28.  
  29. }

1.2.4    显示某个分类下的商品:

1.在首页上点击分类的链接:

2.提交到Servlet:

* 接收参数:分类的ID

* 当前页面:当前页数1

* 调用业务层:

* 封装PageBean:

* 页面跳转:

【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品的更多相关文章

  1. Android学习笔记(二)之异步加载图片

    最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存 ...

  2. wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...

  3. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  4. 【EasyUI学习-2】Easyui Tree的异步加载

    作者:ssslinppp       1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...

  5. [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)

    这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...

  6. selenium学习笔记11——driver.get(url) 页面加载时间太长

    在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在加载,页面没有加载完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经加载出来了. 解决方 ...

  7. 学习Echarts:(二)异步加载更新

    这部分比较简单,对图表的异步加载和更新,其实只是异步获取数据然后通过setOption传入数据和配置而已. $.get('data.json').done(function (data) { myCh ...

  8. (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明

    原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...

  9. android异步加载图片并缓存到本地实现方法

    图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片     在android项目中访问网络图片是非常普遍性的事 ...

  10. Unity+NGUI打造网络图片异步加载和本地缓存工具(一)

    我们已经开发了在移动终端中,异步网络图片被装入多,在unity其中尽管AssetBundle存在,通常第一个好游戏的资源,然后加载到现场,但也有很多地方可以使用异步网络加载图像以及其缓存机制. 我也写 ...

随机推荐

  1. 计算机网络——DNS协议的学习与实现

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...

  2. yii2.0套用模板问题

    载入视图 在控制器中: $this->render(); 会加载布局 $this->renderPartial(); 不会加载布局(也不能载入框架自带的jquery等) Yii2 选择布局 ...

  3. jwt token Example - Python

    0 Pre Install Python3 Install PyCrypto Install PyJWT 1 token 由三部分组成 header, payload, sign 并用逗号连接各部分 ...

  4. iOS 让View始终在屏幕最上层

    UIView层次管理 放到最上层 放到最下层 将一个UIView显示在最前面只需要调用其父视图的 bringSubviewToFront()方法. 将一个UIView层推送到背后只需要调用其父视图的  ...

  5. 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好

    参考snowflace算法,基本思路: 序列12位(更格式化的输出后,性能损耗导致每毫秒生成不了这么多,所以可以考虑减少这里的位,不过留着也并无影响) 机器位10位 毫秒为左移 22位 上述几个做或运 ...

  6. CF #93 div1 B. Password KMP/Z

    题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串. 我自己的做法是 ...

  7. Laravel 中使用 Redis 数据库

    一.前言 Redis 是一个开源高效的键值对存储系统,它通常用作为一个数据结构服务器来存储键值对,它可以支持字符串.散列.列表.集合.有序集合. 1. 安装 predis/predis 在 Larav ...

  8. php代码效率小常识

    1, 尽量不要使用@来进行抑制错误,效率很低 2,能使用单引号时不要使用双引号 3,echo的效率比print要高,同时echo可以输出多个变量 4,使用include,require时候最好使用绝对 ...

  9. 深入浅出node.js

    http://www.infoq.com/cn/articles/what-is-nodejs/

  10. ConcurrentHashMap、HashTable、HashMap的区别

    HashTable与ConcurrentHashMap: 相同点:都是线程安全的,可以在多线程的环境下运行.key和value都不能为null 区别:性能上的差异.HashTable每次操作对象都会锁 ...