JavaWeb实现一个简单的购物系统
1、 首先创建一个图书的实体类
这里使用的是lombok,就不需要这么麻烦的生成get,set,以及构造方法了。
当然你也可以像以前一样生成这些方法,这个无所谓。
Book.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private Integer id;//书的id
private String name;//书的名字
}
2,创建一个数据库模拟类
因为这里只是简单演示一下购物系统,数据就不从数据库里面获取了,我们可以手动添加一些假数据。
BookDB.java
//创建一个类,模拟数据库
public class BookDB {
private static Map<String, Book> bookMap=new LinkedHashMap<>();//创建一个Map集合,来存放书籍
//这里使用静态代码块
static {
bookMap.put("1",new Book(1,"Spring框架开发"));
bookMap.put("2",new Book(2,"Mybatis框架开发"));
bookMap.put("3",new Book(3,"SpringMVC开开发"));
bookMap.put("4",new Book(4,"SpringBoot框架开发"));
bookMap.put("5",new Book(5,"SpringCloud微服务分布式"));
//每次创建对象的时候,都往里面添加五本书
}
//获得所有书的方法
public static Collection<Book> getAll(){
/**
* 这个集合的组成是====>key() + value()
* key就是前面旳序号:1,2,3
* value就是Book对象
* 所以bookMap.values得到的就是Book对象
*/
return bookMap.values();
}
//根据指定的id获得图书
public static Book getBook(Integer id){
return bookMap.get(id);
}
}
这里面有两个方法:
- 获取所有书籍的方法:getAll( )
- 根据id获取单个书籍的方法:getBook( )
3,创建Servlet
3.1、首先创建一个展示所有图书的Servlet
这个Servlet用于展示所有的图书,点击购买之后,就会跳转到购买图书的Servlet中
ShowBooksServlet.java
@WebServlet("/showBooksServlet")
public class ShowBookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1,解决响应乱码
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
//2,获取当前项目路径,注意,这个结尾没有 “/”
String url = req.getContextPath();
//3,从模拟数据库中,获取所有书籍
Collection<Book> books = BookDB.getAll();
//4,遍历这个集合,逐个输出到页面中显示
for (Book book : books) {
//此时的每一个book,其实就是一个Book对象
//因为这只是展示书籍,接下来,我们得点击链接进行购买书籍,所以得拼接一个url,进行页面跳转
String purchaseUrl=url+"/purchaseServlet?id="+book.getId();
writer.print(book.getId()+","+book.getName()+"<a href='"+purchaseUrl+"'>点击购买</a></br>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
浏览器访问:http://localhost:8080/showBooksServlet
前面的项目名称根据自己的环境更改
3.2、创建一个将图书添加到购物车的Servlet
在图书的展示页面中,点击购买之后,就会跳转到这个Servlet,然后在这个Servlet中,就会对购买的图书进行处理,将图书添加到购物车中。
@WebServlet("/purchaseServlet")
public class PurchaseServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1,根据id,来获取图书
String id = req.getParameter("id");
//2,获取当前项目路径,注意,这个结尾没有 “/”
String url = req.getContextPath();
//如果id为空,说明没有添加图书,重定向到ShowBooksServlet
if (id==null){
resp.sendRedirect(url+"/showBooksServlet");
}
//3,根据传过来的id,获取Book对象,BookDB里面有一个静态方法
Book book = BookDB.getBook(id);
//4,创建Session
HttpSession session = req.getSession();
//5,获取我们的购物车,这个购物车是一个ArrayList集合
List<Book> shopCar = (List) session.getAttribute("shopCar");
//购物车shopCar为空,说明是第一次购买
if (shopCar==null){
//第一次购买,那就创建一个购物车
shopCar=new ArrayList<Book>();
//把购物车存入Session中
session.setAttribute("shopCar",shopCar);
}
//6,把我们购买的图书,添加到购物车
shopCar.add(book);
//7,图书添加到购物车之后,我们重定向到购物车界面,这个时候,Session里面储存了一个购物车的集合
resp.sendRedirect(url+"/shopCarServlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
}
3.2 、创建一个用于展示购物车中的图书的Servlet
@WebServlet("/shopCarServlet")
public class ShopCarServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1,设置一下响应编码
resp.setContentType("text/html;charset=utf-8");
//2,获取当前项目路径,注意,这个结尾没有 “/”
String url = req.getContextPath();
//3,从Session中把购物车取出来,首先创建一个Session
HttpSession session = req.getSession();
List<Book> shopCar = (List) session.getAttribute("shopCar");//强制转换一下
//3,判断一下这个购物车是否存在
if (shopCar==null){
//不存在,重定向到ShowBooksServlet
resp.sendRedirect(url+"showServletServlet");
}
//4,判断一下,购物车里面有没有图书
if (shopCar.size()==0){
//没有图书
resp.getWriter().write("对不起!您还没有购买如何图书");
}
//5,购物车存在,并且有书,那就把购物车遍历出来
resp.getWriter().write("您购买的图书有:</br>");
for (Book book : shopCar) {
resp.getWriter().write(book.getName()+"</br>");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
}
4,测试
浏览器访问http://localhost:8080/showBooksServlet
显示:
点击购买之后,跳转到这个界面
返回刚才的界面,多买几本
测试成功