A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2018-6-22 21:57  /  1518 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

李思贤:商品模块
一:异步完成分类的加载.
1创建分类的表,插入数据
创建相关类
在menu.jsp找到分类标签 设好ID 设置一个页面加载事件,跳转到CategoryServlet中
        $(function(){
                $.post("${ pageContext.request.contextPath }/CateServlet",{"method":"findAll"},function(data){
                       
                });
        });
查询到所有分类List 要转为JSON,注意导包
JSONArray jsonArray = JSONArray.fromObject(list); 打印 输出
现在就可以JSP接收json了  添加json属性 遍历data,存入menuID中
$(function(){
                $.post("${ pageContext.request.contextPath }/CategoryServlet",{"method":"findAll"},function(data){
                        //alert(data);
                        $(data).each(function (i,n) {
                                $("#menuID").append("<li><a href='#'>"+n.cname+"</a></li>");
                        })
                },"json");
        });
分类完成了, 但因为我们每个页面都有导航条,所以每次跳转页面都要执行一次,这样会降低我们的效率,所以用 缓存 来做,我们把数据存入缓存中,从缓存获取,
这里我们用ehcache 缓存技术,  每次引入新技术,要导包.ehcache还有配置文件
缓存的代码一般加在业务层Service层
先拿到缓存,判断是否有list数据,没有的话,去数据库查,查完记得添加到缓存,如有有list数据,直接return.代码如下:
//使用缓存优化程序
                //获取到,直接返回,获取不到再去数据库查
                //用类的加载器读配置文件
                CacheManager cacheManager = CacheManager.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));
                //从配置文件中获取名字为categoryCache的缓存
                Cache cache = cacheManager.getCache("categoryCache");
                //判断缓存中是否有List集合
                Element element = cache.get("list");
                List<Category> list = null;
                if(element == null){
                        //缓存中没数据
                        System.out.println("缓存中没数据");
                        CategoryDao categoryDao = new CategoryDaoImpl();
                        list=categoryDao.findAll();
                        element = new Element("list",list);
                        cache.put(element);
                }else{
                        //缓存中有数据
                        System.out.println("缓存中有数据");
                        list = (List<Category>)element.getObjectValue();               
                }
                return list;

Category实体类对象要实现序列号接口,这样才能序列化到硬盘.


二:首页上的最新商品,热门商品显示
我们一登录就可以看到这些商品,所以应该在IndexServlet中先查询了
这里是商品模块了,先建表...
完事再建各个类,外键的属性注意一下
// 外键
        private Category category;

在IndexServlet直接调用业务层找到两个List对象,存入request域中,
在Index.jsp中用JSTL和EL表达式来显示热门商品和最新商品.



三:显示某个分类下的商品.
点击某个分类,提交到Servlet,传递分类ID和当前页数1.
在异步加载连接处写路径:
${ pageContext.request.contextPath }/ProductServlet?cid="+n.cid+"&method=findByCid&currPag
e=1

编写PageBean类.

ProductServlet中接收cid 和 currpage
调用业务层,查询 返回一个pageBean对象存入域中 发送给Product_list.jsp
在业务层中要设置参数,有点麻烦:
PageBean<Product> pageBean = new PageBean<Product>();
                //设置参数
                //当前页数
                pageBean.setCurrPage(currPage);
                //每页记录数
                Integer pageSize = 12;
                pageBean.setPageSize(pageSize);
                //总记录数
                ProductDao productDao = new ProductDaoImpl();
                Integer totalCount = productDao.findCountByCid(cid);
                 pageBean.setTotalCount(totalCount);
                 //设置总页数
                 double tc = totalCount;
                 Double num = Math.ceil(tc/pageSize);
                pageBean.setTotalPage(num.intValue());
                //设置每页显示集合
                int begin = (currPage-1)*pageSize;
                List<Product> list = productDao.findPageByCid(cid,begin,pageSize);
                pageBean.setList(list);
return pageBean;       


分页工具条:几个代码逻辑实现
${param.cid}
<li <c:if test="${ pageBean.currPage == 1 }">class='disabled'</c:if>>



显示某个商品详情:
在商品列表页面上点击某个商品,提交Servlet 传递pid
调用业务层查找这个product信息,存入域中,再在product_info.jsp页面展示出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马