③数据库
这里就直接用集合模拟数据库了,简单的domo而已。
//既然是购物车案例,应该会有增删的操作,通过关键字查询书籍,所以使用LinkedHashMap集合
privatestaticMap<String,Book>map=newLinkedHashMap<>();
static{
map.put("1",newBook("1","java","zhongfucheng","好书",99));
map.put("2",newBook("2","javaweb","ouzicheng","不好的书",44));
map.put("3",newBook("3","ajax","xiaoming","一般般",66));
map.put("4",newBook("4","spring","xiaohong","还行",77));
}
publicstaticMap<String,Book>getAll(){
returnmap;
}
④开发dao
dao层应该至少提供获取所有的书籍和根据关键字获取得到书籍
publicclassBookDao{
//获取存放着书籍的Map集合
publicMapgetAll(){
returnBookDB.getAll();
}
//根据关键字获取某本书籍
publicBookfind(Stringid){
returnBookDB.getAll().get(id);
}
}
⑤开发service
service层就是对DAO层的一个封装
publicclassBusinessService{
BookDaobookDao=newBookDao();
/*列出所有的书*/
publicMapgetAll(){
returnbookDao.getAll();
}
/*根据书的id获取书*/
publicBookfindBook(Stringid){
returnbookDao.find(id);
}
//...待会还有其他的功能再从这里补充!
}
⑥开发web
列出所有的书
开发提供JSP页面的Servlet
//调用service层的方法,获取得到存放书籍的Map集合
BusinessServicebusinessService=newBusinessService();
Mapbooks=businessService.getAll();
//存放在request域对象中,交给jsp页面显示
request.setAttribute("books",books);
//跳转到jsp页面中
request.getRequestDispatcher("/WEB-INF/listBook.jsp").forward(request,response);
开发显示所有书籍的jsp
<%@pagecontentType="text/html;charset=UTF-8"language="java"%>
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>显示所有的书籍</title>
</head>
<body>
<%--Servlet传递过来的是一个Map对象,要显示所有的书籍,就需要遍历Map集合(EL表达式和JSTL标签合用)--%>
<tableborder="1px">
<tr>
<td>书籍编号</td>
<td>名称</td>
<td>作者</td>
<td>详细信息</td>
<td>价格</td>
</tr>
<c:forEachitems="${books}"var="me">
<tr>
<td>${me.key}</td>
<td>${me.value.name}</td>
<td>${me.value.author}</td>
<td>${me.value.description}</td>
<td>${me.value.price}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
购买操作
作为购物车的案例,怎么能没有购买的操作呢?于是乎就增加购买的操作!
开发处理购买的Servlet
//获取得到传递过来的id
Stringid=request.getParameter("bookid");
//把用户想要买的书放到购物车上
//用户不单单只有一个,要让购物车上只为当前的用户服务,就需要用到会话跟踪技术了
Cartcart=(Cart)request.getSession().getAttribute("cart");
//如果当前用户还没有点击过购买的商品,那么是用户的购物车是空的
if(cart==null){
cart=newCart();
request.getSession().setAttribute("cart",cart);
}
//调用BussinessService的方法,实现购买功能!
BusinessServicebusinessService=newBusinessService();
businessService.buyBook(id,cart);
//跳转到购物车显示的页面上
request.getRequestDispatcher("/listCart.jsp").forward(request,response);
- 在我们前面开发BusinessService时,是没有buyBook()这个方法的!下面更新了BusinessService的代码:
/*
* 在购买书籍的时候,我们发现需要将书籍添加到购物车上
* 如果我们直接在Servlet上使用Cart实体对象的addBook()和BookDao对象的find()方法,是可以完成功能的
*
* 但是,这样web层的程序就跟Dao层的耦合了,为了代码性的健壮性和解耦,我们在BusinessService中对他俩进行封装
*
* 于是有了buyBook()这个方法!
* */
/*把用户想买的书籍添加到当前用户的购物车上*/
publicvoidbuyBook(Stringid,Cartcart){
Bookbook=bookDao.find(id);
cart.addBook(book);
}