【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品
今日任务
- 完成分类模块的功能
- 完成商品模块的功能
1.1 分类模块的功能:
1.1.1 查询分类的功能:

1.1.2 查询分类的代码实现:
1.1.2.1 创建表:
CREATE TABLE `category` ( `cid` varchar(32) NOT NULL, `cname` varchar(20) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.1.2.2 功能实现:
1.直接查询所有分类:
CategoryDao categoryDao = new CategoryDaoImpl(); List<Category> list = categoryDao.findAll();
2.异步加载分类:
$(function() {
$.post("/store_v2.0/CategoryServlet", {
"method" : "findAll"
}, function(data) {
$.each(data, function(i, n) {
$("#menu").append("<li><a href='#'>" + n.cname + "</a></li>");
});
}, "json");
});
3.使用缓存技术:对程序进行优化.
* 缓存:其实就是内存中的一块空间.可以使用缓存将数据源中的数据拿到,存入到内存中.后期获得数据的话 从缓存中进行获得.
* Memcache :
* EHCache :是Hibernate常使用的二级缓存的插件.
* Redis :
* 使用ehcache:
* 引入jar包:
* 引入配置文件:
// 业务层查询所有分类的方法:
public List<Category> findAll() throws SQLException {
/*
* CategoryDao categoryDao = new CategoryDaoImpl(); return
* categoryDao.findAll();
*/
/**
* 从缓存中查询数据:
* * 有数据,直接将缓存的数据返回.
* * 如果没有,查询数据库,数据存入到缓存中.
*/
List<Category> list = null;
// 从缓存中进行查询:
CacheManager cacheManager = CacheManager
.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));
Cache cache = cacheManager.getCache("categoryCache");
Element element = cache.get("list");
if(element != null){
// 缓存中有数据:
System.out.println("缓存中有数据...");
list = (List<Category>) element.getObjectValue();
}else{
// 缓存中没有数据:
System.out.println("缓存中没有数据...");
CategoryDao categoryDao = new CategoryDaoImpl();
list = categoryDao.findAll();
Element e = new Element("list", list);
// cache.
cache.put(e);
}
return list;
}
1.2 前台页面上的商品显示:
1.2.1 商品显示准备工作:
1.2.1.1 创建表:
CREATE TABLE `product` ( `pid` varchar(32) NOT NULL, `pname` varchar(50) DEFAULT NULL, `market_price` double DEFAULT NULL, `shop_price` double DEFAULT NULL, `pimage` varchar(200) DEFAULT NULL, `pdate` datetime DEFAULT NULL, `is_hot` int(11) DEFAULT NULL,-- 1:热门 `pdesc` varchar(255) DEFAULT NULL, `pflag` int(11) DEFAULT NULL,-- 1:下架 `cid` varchar(32) DEFAULT NULL, PRIMARY KEY (`pid`), KEY `sfk_0001` (`cid`), CONSTRAINT `sfk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2.1.2 创建类:
1.2.2 首页上的热门商品的显示和最新商品的显示
ProductService productService = new ProductServiceImpl();
try {
// 查询热门商品:
List<Product> hotList = productService.findByHot();
// 查询最新商品:
List<Product> newList = productService.findByNew();
req.setAttribute("hotList",hotList);
req.setAttribute("newList",newList);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException();
}
1.2.3 商品详情的显示
public String findById(HttpServletRequest req,HttpServletResponse resp){
// 接收参数:
String pid = req.getParameter("pid");
// 调用业务层:
ProductService productService = new ProductServiceImpl();
try {
Product product = productService.findById(pid);
req.setAttribute("product",product);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException();
}
// 页面跳转
return "/jsp/product_info.jsp";
}
1.2.4 显示某个分类下的商品:
1.在首页上点击分类的链接:
2.提交到Servlet:
* 接收参数:分类的ID
* 当前页面:当前页数1
* 调用业务层:
* 封装PageBean:
* 页面跳转:
【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品的更多相关文章
- Android学习笔记(二)之异步加载图片
最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存 ...
- wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- 【EasyUI学习-2】Easyui Tree的异步加载
作者:ssslinppp 1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...
- [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...
- selenium学习笔记11——driver.get(url) 页面加载时间太长
在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在加载,页面没有加载完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经加载出来了. 解决方 ...
- 学习Echarts:(二)异步加载更新
这部分比较简单,对图表的异步加载和更新,其实只是异步获取数据然后通过setOption传入数据和配置而已. $.get('data.json').done(function (data) { myCh ...
- (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明
原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...
- android异步加载图片并缓存到本地实现方法
图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片 在android项目中访问网络图片是非常普遍性的事 ...
- Unity+NGUI打造网络图片异步加载和本地缓存工具(一)
我们已经开发了在移动终端中,异步网络图片被装入多,在unity其中尽管AssetBundle存在,通常第一个好游戏的资源,然后加载到现场,但也有很多地方可以使用异步网络加载图像以及其缓存机制. 我也写 ...
随机推荐
- Webdriver API之操作(一)
一. 控制浏览器 1. 控制浏览器大小 driver.set_window_size(480,800) #浏览器宽480,高800显示 dirver.maximize_window() #浏览器最大化 ...
- 通过web对.exe程序进行更新和修改
实现功能:通过网站更新用户的软件,需要联网,也可以通过本地网站更新局域网用户软件. 根本实现:1.一个网站(我用的是自己的www.aq36.xyz ,本地就可以,可以用localhost)然后运行up ...
- JavaScript高级程序设计---学习笔记(五)
1.2D上下文 1)填充与描边 填充和描边的两个操作取决于两个属性:fillStyle和strokeStyle.两个属性的值可以是字符串.渐变对象或模式对象,默认值都是#000000 例: html: ...
- JS判断值是否是正数
1.使用isNaN()函数 isNaN()的缺点就在于 null.空格以及空串会被按照0来处理 NaN: Not a Number /** *判断是否是数字 * **/ function isReal ...
- Xamarin.Forms+Prism(3)—— 简单提示UI的使用
这次给大家介绍两个比较好用的提示插件,如成功.等待.错误提示. 准备: 1.新建一个Prism Xamarin.Forms项目: 2.右击解决方案,添加NuGet包: 1)Acr.UserDialog ...
- (二)java多线程之synchronized
本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco198 ...
- 谈谈web上种图片应用的优缺点
web中承载信息的主要方式就是图片与文字了,以下就是对一些web图片格式的优缺点进行归纳. 1.GIF GIF图是比较古老的web图片格式之一,可以追溯到1987,几乎所有的浏览器都支持这一种格式,老 ...
- C#图像处理——ImageProcessor
这是个老生常谈的话题,需求实在太多,而且也较简单,写此文也是因为几个月没写技术文章了,权当为下一步开个头.我之前也做过很多此类项目,但是就我自己来说每次处理方式还都不一样,有用OpenCV的,有用Ma ...
- JQuery 通过方向键控制div上下左右移动
在CSS中当DOM元素的position属性为absolute或relative时,我们可以通过改变这个元素的left和top属性的具体值来控制元素在页面中显现的位置. 利用上述属性,我们可以简单实现 ...
- 一个想法照进现实-《IT连》创业项目:创业时该不该用新手程序员
前言: 距离上一篇文章,转眼已然一个多月了,这段时间没出来和大伙汇报创业的进度,怪我了. 最近又感冒了,已经一个多星期了,还在感冒中,不过感冒也不能偷懒了,每天都有大把的事情等着我解决~~~ 不过今天 ...