实现首页的分类查询
程序员文章站
2022-04-24 23:47:33
...
步骤
在webapp/index.jsp转发到indexServlet
<jsp:forward page="/indexServlet"></jsp:forward>
实现首页的分类查询
- 将分类信息放入request,转发到真实的首页jsp/index.jsp
//查询全部分类
CategoryService CategoryService=new CategoryServiceImp();
List<Category> list=CategoryService.findAllCats();
//放入request域对象
req.setAttribute("allCats", list);
在header.jsp中显示
<c:forEach items="${allCats}" var="c">
<li><a href="#">${c.cname}</a></li>
</c:forEach>
- 缺点
- 只有在首页才能看到分类信息。
- 若要在在登录及注册时也显示分类,则必须在转发到登录或者注册页面前,查询分类信息并放入request。
- 由于分类显示页面(header.jsp),被其他各个页面包含,在header.jsp中,当页面加载完毕,向服务器发起ajax请求,服务器端经过处理,将所有分类信息以JSON格式的数据返回,获取到返回的所有分类绑定在页面的显示分类区域
@WebServlet("/categoryServlet")
public class CategoryServlet extends BaseServlet {
public String findAllCats(HttpServletRequest request, HttpServletResponse response) throws Exception {
//告诉浏览器本次响应数据格式是JSON格式字符串
response.setContentType("application/json;charset=utf-8");
//调用业务层获取全部分类
CategoryService categoryService = new CategoryServiceImp();
List<Category> allCats = categoryService.findAllCats();
//将全部分类信息转化为JSON格式数据
String string = JSONArray.fromObject(allCats).toString();
//将全部分类信息响应到客户端
response.getWriter().println(string);
}
}
在header.jsp向服务器发起ajax请求,获取到返回的所有分类绑定在页面的显示分类区域
<script>
$(function () {
$.post("${pageContext.request.contextPath}/categoryServlet", {"method": "findAllCats"}, function (dt) {
// jquery遍历数据
$.each(dt, function (i, obj) {
var li = "<li><a href='${pageContext.request.contextPath}/productServlet?method=findProductsWithCidAndPage&num=1&cid=" + obj.cid + "'>" + obj.cname + "</a></li>";
$("#myUL").append(li);
});
});
});
</script>
- 缺点:如果用户频繁的去访问包含分类信息的页面,每次都要去数据库中获取信息,影响性能。
- 获取redis中的分类信息,如果获取不到信息,再查询数据库,将数据缓存在redis中,响应。如果获取到信息直接响应。
@WebServlet("/categoryServlet")
public class CategoryServlet extends BaseServlet {
public String findAllCats(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("application/json;charset=utf-8");
Jedis jedis = JedisPoolUtils.getJedis();
String allCats = jedis.get("allCats");
if (null == allCats || "".equals(allCats)) {
System.out.println("缓存中没有数据");
//查询所有分类
CategoryService CategoryService = new CategoryServiceImp();
List<Category> list = CategoryService.findAllCats();
//将集合中的所有分类信息转换为JSON格式的字符串数据
allCats = JSONArray.fromObject(list).toString();
//将获取到的分类信息存入jedis
jedis.set("allCats", allCats);
} else {
System.out.println("缓存中有数据");
}
//将字符串数据响应到客户端
response.getWriter().println(allCats);
jedis.close();
return null;
}
}