Java Web基础入门第三十讲 基于Servlet+JSP+JavaBean开发模式的购物车

本文介绍了基于Servlet+JSP+JavaBean的MVC架构,详细阐述了如何开发一个购物车应用,包括创建项目结构、分层架构的代码编写,涉及领域模型、数据访问层、业务逻辑层和服务层的实现,以及Web层各个功能的开发,如展示书籍、购买、删除和修改购物车中的商品等操作。同时,强调了在实际开发中需要注意的细节,如使用重定向而非请求转发等。
摘要由CSDN通过智能技术生成

前言:上一讲以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,所以我们也初步了解了Servlet+JSP+JavaBean(MVC)这种开发模式。现在我们以一个网上购物时的购物车程序来重新回顾这种开发模式。

创建MVC架构的Web项目

在Eclipse中新创建一个day10项目,导入项目所需要的开发包(jar包),创建项目所需要的包,在Java开发中,架构的层次是以包的形式体现出来的。
在这里插入图片描述
温馨提示:不同于上一讲的用户登录注册程序,该购物车程序是创建一个类来代表数据库,所以不需要用到其他一些jar包,只需用到stl-1.2.jar就行。
在这里插入图片描述
以上就是根据此项目的实际情况创建的包,可能还需要创建其他的包,这个得根据项目的需求来定了。
紧接着,我们就来创建代表数据库的类。假设这是一个网上书城的项目,用户购买的商品即为书,所以在数据库中存储的商品就是书。于是,在cn.liayun.DB包下创建一个DB类,该类的具体代码如下:

package cn.liayun.DB;

import java.util.LinkedHashMap;
import java.util.Map;

import cn.liayun.domain.Book;

//代表数据库的类
public class DB {
   
	
	private static Map<String, Book> map = new LinkedHashMap<String, Book>();
	
	static {
   
		map.put("1", new Book("1", "Java Web开发", "老张", 38, "一本好书"));
		map.put("2", new Book("2", "JDBC开发", "老黎", 18, "一本好书"));
		map.put("3", new Book("3", "Ajax开发", "老佟", 328, "一本好书"));
		map.put("4", new Book("4", "JBPM开发", "老毕", 58, "一本好书"));
		map.put("5", new Book("5", "Struts开发", "老方", 28, "一本好书"));
		map.put("6", new Book("6", "Spring开发", "老方", 98, "一本好书"));
	}
	
	public static Map<String, Book> getAll() {
   
		return map;
	}
}

温馨提示:关于怎样创建代表数据库的类,即DB.java,可参考我的这篇博客——《Java Web基础入门第十八讲 Servlet开发——使用Cookie进行会话管理》
然后,在WEB-INF目录下创建一个jsp目录,jsp目录存放系统的一些受保护(不允许用户直接通过URL地址进行访问)的jsp页面,用户要想访问这些受保护的jsp页面,那么只能通过cn.liayun.web.UI这个包里面的Servlet。最后,创建好的项目架构如下图所示:
在这里插入图片描述

分层架构的代码编写

分层架构的代码也是按照【域模型层(domain)】→【数据访问层(dao、dao.impl)】→【业务逻辑层(service、service.impl)】→【表现层(web.controller、web.UI、web.filter、web.listener)】→【工具类(util)】→【测试类(junit.test)】的顺序进行编写的。

开发domain层

在cn.liayun.domain包下创建一个Book类,该类的具体代码如下:

package cn.liayun.domain;

public class Book {
   

	private String id;
	private String name;
	private String author;
	private double price;
	private String description;
	
	public Book() {
   
		super();
		// TODO Auto-generated constructor stub
	}
	public Book(String id, String name, String author, double price, String description) {
   
		super();
		this.id = id;
		this.name = name;
		this.author = author;
		this.price = price;
		this.description = description;
	}
	public String getId() {
   
		return id;
	}
	public void setId(String id) {
   
		this.id = id;
	}
	public String getName() {
   
		return name;
	}
	public void setName(String name) {
   
		this.name = name;
	}
	public String getAuthor() {
   
		return author;
	}
	public void setAuthor(String author) {
   
		this.author = author;
	}
	public double getPrice() {
   
		return price;
	}
	public void setPrice(double price) {
   
		this.price = price;
	}
	public String getDescription() {
   
		return description;
	}
	public void setDescription(String description) {
   
		this.description = description;
	}
	
}

开发数据访问层(dao、dao.impl)

在cn.liayun.dao包下创建一个UserDao类,该类的具体代码如下:

package cn.liayun.dao;

import java.util.Map;

import cn.liayun.DB.DB;
import cn.liayun.domain.Book;

public class BookDao {
   

	public Map<String, Book> getAll() {
   
		return DB.getAll();
	}
	
	public Book find(String id) {
   
		return DB.getAll().get(id);
	}
	
}

开发service层(service层对web层提供所有的业务服务)

我们在第一次开发一个新项目的过程当中,并不清楚要开发的项目的所有功能,所以我们可以先开发出最容易想到的功能,然后将自己伪装成一个用户,在浏览网站页面的过程中,看用户需要什么功能,那我们程序员就开发什么功能,然后步步为营,将整个项目的功能完成。例如,我第一次开发这个购物车功能模块的过程当中,首先想到的是要给用户展示所有书籍,以及根据书的ID查询书的信息。其他的功能我没想到,所以可以等这些功能完成之后,根据前端页面来看需要什么功能。
在cn.liayun.service包下创建一个BusinessService类,先实现如下两个业务服务的功能:

  1. 给用户展示所有书籍;
  2. 根据书的ID查询书的信息。

这样,该类的具体代码如下:

package cn.liayun.service;

import java.util.Map;

import cn.liayun.dao.BookDao;
import cn.liayun.domain.Book;

//业务类,统一对Web层提供所有服务
public class BusinessService {
   

	private BookDao dao = new BookDao();
	
	public Map<String, Book> getAllBook() {
   
		return dao.getAll();
	}
	
	public Book findBook(String id) {
   
		return dao.find(id);
	}
	
}

开发web层

开发给用户展示所有书籍的功能

在cn.liayun.web.controller包中编写用于处理给用户展示所有书籍请求的ListBookServlet,该Servlet的具体代码如下:

package cn.liayun.web.controller;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.liayun.domain.Book;
import cn.liayun.service.BusinessService;

//获取所有书
@WebServlet("/ListBookServlet"
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值