电子商城项目 (五)实现首页的分类查询j以及展示最新最热商品
当登录首页的时候,需要对数据库进行查询,在页面的最上栏展示出商品的分类信息。如下图:
一、版本一
当我们登录首页的时候,就请求IndexServlet进行对数据库中的分类信息进行查找。然后将查找的内容放入request中并返回,这里不建议用session存值,
如果请求用户一多,如淘宝、京东等网站,服务器就会为每一个用户存一个session值,对服务器消耗过大。但随之带来的问题是,只能在首页进行显示分类信息,在其他(同样包含header.jsp,这里面包含着显示商品分类的代码)的页面。就没有办法展示出分类信息,因为request中的值的范围只对本次请求有效。
-
登录首页的时候,直接请求IndexServlet
-
IndexServlet调用service层获取商品分类信息
-
dao层的代码
弊端:分类信息只存在首页,其他页面不存在
二、版本二
可以在header.jsp页面的最下面加一个Ajax请求,通过Ajax来获取商品的分类信息,然后将商品的分类信息写入网页上,这样只要包含header.jsp这个页面的网页,都可以显示出商品分类的信息。
-
header.jsp中Ajax请求
-
CategoryServlet代码
-
这样在每一个包含header.jsp的页面可以展示出分类信息
首页的商品分类信息
登录界面的商品分类信息
这样还有很大的弊端,只要加载header.jsp页面,就会对数据进行查询操作,当用户量比较多的话,对数据库的查询访问过于频繁,会影响整个项目的效率,可以试着采用redis数据库进行改进,CategoryServlet首先访问redis中的分类信息,如果有,直接拿来用,不用再去查找MySQL数据库,如果没有,去查询MySQL,然后将分类信息存入redis中方便后面使用,以此来提升效率。
三、展示最新最热商品
商品的信息都在数据库中,需要在首页展示的话,同样也需要对数据库进行查询,这部分的难点主要是进行数据库查询的语法。
获取最新的九件商品
select * from product where pflag=0 order by pdate desc limit 0.9;
获取最热的就见商品
select * from product where pflag=0 and is_hot=1 order pdate desc limit 0,9;
- 当访问主页的时候,首先访问IndexServlet,获取到最新及最热的商品
- 调用Service层代码
-
Dao层查询的具体实现
-
index.jsp界面的代码,利用for循环,将存放在request中的商品信息展示出来
- 最终效果