主要内容: 抽取公共页面 购物车的实现
一,抽取公共页面
将一些页面公共的部分 ,单独抽取出来.方便维护与管理.
一般有两个 头部分 与为部分. 此项目为hearer.jsp 与 footer.jsp
调用:
<%@ include file="/jsp/header.jsp" %>
二,获取分类信息
版本一:
出现一个问题,首页有查询的分类信息
但是注册页面没有分类信息
原因:注册页面有没调用分类的方法.
解决方案:在注册的Servlet中实现调用分类的方法,并将数据存放到request中.
弊端代码冗余.
版本二:每个页面都有header.jsp,所以
通过ajax请求CategoryServlet—>getAllCates得到分类的数据,转成JSON格式.
原理图:
<script>
$(function(){
//通过ajax请求CategoryServlet--->getAllCates得到分类的数据,转成JSON格式.
var url = "/store/CategoryServlet";
var json = {"method":"findAllCates"};
$.post(url,json,function(data){
//jquery遍历数据
$.each(data,function(i,obj){
var li="<li><a href='#'>"+obj.cname+"</a></li>";
$("#myUL").append(li);
});
} ,"json");
});
</script>
/ /调用业务层的得到分类的方式
CategoryService cs= new CategoryServiceImp();
List list= cs.getAllCates();
//将lsit 集合转成Json格式
String jsonStr = JSONArray.fromObject(list).toString();
System.out.println(jsonStr);
//将数据响应到客户端
//告诉浏览器本次响应的数据类型为json
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonStr);
弊端:每次都要请求数据库,影响性能
版本三:redis
导入jar包,和utils类
Jedis jedis = JedisUtils.getJedis();
String jsonStr = jedis.get("AllCates");
if(null == jsonStr || "".equals(jsonStr)){
System.out.println("redis中没有数据");
//调用业务层的得到分类的方式
CategoryService cs= new CategoryServiceImp();
List<Category> list= cs.getAllCates();
//将lsit 集合转成Json格式
jsonStr = JSONArray.fromObject(list).toString();
//将数据响应到客户端
//告诉浏览器本次响应的数据类型为json
jedis.set("AllCates", jsonStr);
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonStr);
}else{
System.out.println("redis中有数据");
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonStr);
}
JedisUtils.closeJedis(jedis);
三,首页显示最新最热商品
商品详情
Servlet的弊端:为什么现在的开发不用Servlet