Java Web基础入门第九十二讲 在线网上书店(七)——实现订单管理模块
发布日期:2021-06-30 18:04:28 浏览次数:2 分类:技术文章

本文共 13695 字,大约阅读时间需要 45 分钟。

购买

在该项目中,我们设计成用户不需要登录就能购买。因此,在前台首页(client/index.jsp)显示图书的时候,就添加购买的超链接。

在这里插入图片描述
接着,在cn.liayun.web.client包中新建一个BuyServlet,用于处理用户想要买的书籍。

package cn.liayun.web.client;import java.io.IOException;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.domain.Cart;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet("/client/BuyServlet")public class BuyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id"); BusinessService service = new BusinessServiceImpl(); Book book = service.findBook(id); Cart cart = (Cart) request.getSession().getAttribute("cart"); if (cart == null) {
cart = new Cart(); request.getSession().setAttribute("cart", cart); } cart.add(book); //一定要用重定向技术 response.sendRedirect(request.getContextPath() + "/client/listcart.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub doGet(request, response); }}

然后,在WebRoot/client目录下新建一个显示购物车的listcart.jsp页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
购物车列表页面 <%@include file="/client/head.jsp"%>

购物车页面

书名 售价 数量 小计
${entry.value.book.name } ${entry.value.book.price } ${entry.value.quantity } ${entry.value.price }元
合计 ${cart.price }元
生成订单

最后,测试的效果如下:

在这里插入图片描述

用户登录与注册

当用户购买了几本图书后,想要点击生成订单超链接生成他自己的订单,此时会交由一个Servlet处理,判断该用户是否登录本网站,如果他登录了本网站,那么就会帮他生成一份订单;反之,该用户就必须登录本网站了。

于是,我们在显示购物车页面的生成订单超链接上绑定一个OrderServlet。
在这里插入图片描述
紧接着,在cn.liayun.web.client包中新建一个OrderServlet,判断该用户是否登录本网站?
在这里插入图片描述
由于此刻,用户都是没有登录本网站的,所以看到的效果都是下面这样的。
在这里插入图片描述
下面,我们来实现用户的登录和注册功能。首先,在前台首页的页头(client/head.jsp)添加用户登录和注册的表单。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

网上书店

用户名:
密码:

页面显示的效果如下:

在这里插入图片描述
紧接着,在WebRoot/client目录下将用户注册页面(register.jsp)创建出来。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
用户注册页面

用户注册

用户名
密码
电话
手机
住址
邮箱

用户注册页面的显示效果如下:

在这里插入图片描述
接下来,我们来写代码来实现用户的登录和注册功能。

登录

当用户点击登录按钮的时候,把数据带过去给Servlet,让Servlet调用BusinessService的方法,实现登录。因此,我们要在cn.liayun.web.client包中新建一个LoginServlet,用于处理用户登录的请求。

package cn.liayun.web.client;import java.io.IOException;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.User;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet("/client/LoginServlet")public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username"); String password = request.getParameter("password"); BusinessService service = new BusinessServiceImpl(); User user = service.findUser(username, password); if (user == null) {
request.setAttribute("message", "用户名或者密码错误!!"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; } request.getSession().setAttribute("user", user); response.sendRedirect(request.getContextPath() + "/index.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub doGet(request, response); }}

如果用户登录本网站成功了,那么前台首页的页头(client/head.jsp)部分就要修改为:

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

网上书店

用户名:
密码:
欢迎您,${user.username }

注册

要是首次登录本网站的,可以填写用户注册信息,点击注册按钮的时候,把数据带过去给Servlet,让Servlet调用BusinessService的方法,实现注册。因此,我们要在cn.liayun.web.client包中新建一个RegisterServlet,用于处理用户注册的请求。

package cn.liayun.web.client;import java.io.IOException;import java.util.UUID;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.User;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;import cn.liayun.utils.WebUtils;@WebServlet("/client/RegisterServlet")public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//在实际开发中,一定要进行表单校验 User user = WebUtils.request2Bean(request, User.class); user.setId(UUID.randomUUID().toString()); BusinessService service = new BusinessServiceImpl(); service.addUser(user); request.setAttribute("message", "注册用户成功!!!"); } catch (Exception e) {
e.printStackTrace(); request.setAttribute("message", "注册用户失败!!!"); } request.getRequestDispatcher("/message.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

温馨提示:在实际开发中,一定要进行表单校验。这里,我省略了这一步。

生成订单

为了生成订单方便,在前台首页的页头(client/head.jsp)部分添加首页、查看购物车、查看自己的订单等超链接。

在这里插入图片描述
当某个用户购买了几本书后,在其生成他自己的订单时,他必然要登录到本网站中,点击查看购物车的超链接,他就可以看到自己购买了几本书了。
在这里插入图片描述
现在来生成订单,修改cn.liayun.web.client包中的OrderServlet,添加生成订单的代码。
在这里插入图片描述
这样,生成订单的效果如下:
在这里插入图片描述

后台显示订单

首先,我们要找到后台左侧导航页面——left.jsp,在待处理订单的超链接上绑定处理请求的OrderServlet。

在这里插入图片描述
然后,在cn.liayun.web.manager包中新建一个OrderServlet,用于处理查询带处理订单的请求。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;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.Order;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet(name = "OrderServlet1", urlPatterns = {
"/manager/OrderServlet1" })public class OrderServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("getAll".equals(method)) {
getAll(request, response); } } private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean status = Boolean.parseBoolean(request.getParameter("status")); List
list = service.getOrderByStatus(status); request.setAttribute("list", list); request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

紧接着,在WebRoot/manager目录中新建一个显示订单信息的listorder.jsp页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
订单展示列表页面

订单信息

订单人 下单时间 订单状态 订单总价 操作
${order.user.username } ${order.ordertime } ${order.status == false ? '未发货' : '已发货' } ${order.price } 查看明细 修改

最后,显示的效果如下:

在这里插入图片描述
下面我们要查看具体订单的详细信息了。当管理员点击某个订单的查看明细超链接时,应该显示这个订单的详细信息,如下图所示。
在这里插入图片描述
所以,要在某个订单的查看明细超链接上绑定一个OrderServlet,在该OrderServlet中查询出某个订单的具体详细信息。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;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.Order;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet(name = "OrderServlet1", urlPatterns = {
"/manager/OrderServlet1" })public class OrderServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("getAll".equals(method)) {
getAll(request, response); } if ("find".equals(method)) {
find(request, response); } } private void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id"); Order order = service.findOrder(id); request.setAttribute("order", order); request.getRequestDispatcher("/manager/orderdetail.jsp").forward(request, response); } private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean status = Boolean.parseBoolean(request.getParameter("status")); List
list = service.getOrderByStatus(status); request.setAttribute("list", list); request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

紧接着,在WebRoot/manager目录中新建一个展示具体订单的详细信息的orderdetail.jsp页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
订单明细页面

订单明细

书名 售价 数量 应收货款
${orderitem.book.name } ${orderitem.book.price } ${orderitem.quantity } ${orderitem.price }元
总计应收货款 ${order.price }元

收货人详细地址

用户 电话 手机 地址 邮箱
${order.user.username } ${order.user.phone } ${order.user.cellphone } ${order.user.address } ${order.user.email }
确认发货

接下来,管理员就要将某个用户下的订单置为发货状态了。在以上页面中的确认发货超链接上绑定一个OrderServlet,在该OrderServlet中将某个用户下的订单置为发货状态。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;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.Order;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet(name = "OrderServlet1", urlPatterns = {
"/manager/OrderServlet1" })public class OrderServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("getAll".equals(method)) {
getAll(request, response); } if ("find".equals(method)) {
find(request, response); } if ("update".equals(method)) {
update(request, response); } } private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String id = request.getParameter("id"); service.updatOrder(id, true); request.setAttribute("message", "订单已置为发货,请及时发货"); } catch (Exception e) {
e.printStackTrace(); request.setAttribute("message", "出错!!!"); } request.getRequestDispatcher("/message.jsp").forward(request, response); } private void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id"); Order order = service.findOrder(id); request.setAttribute("order", order); request.getRequestDispatcher("/manager/orderdetail.jsp").forward(request, response); } private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean status = Boolean.parseBoolean(request.getParameter("status")); List
list = service.getOrderByStatus(status); request.setAttribute("list", list); request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

为了方便查询已发货订单,找到后台左侧导航页面——left.jsp,在待已发货订单的超链接上绑定处理请求的OrderServlet。

在这里插入图片描述
这样,在后台显示订单这部分,我们就算是做完了!最后,也测试一下,效果如下:
在这里插入图片描述

转载地址:https://liayun.blog.csdn.net/article/details/91410774 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java Web基础入门第九十三讲 在线网上书店(八)——实现数据库管理模块
下一篇:Java Web基础入门第九十一讲 在线网上书店(六)——实现图书管理模块

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年05月02日 16时41分16秒