Web开发:西蒙购物网(控制层)

一、1、创建登录处理类LoginServlet
Web开发:西蒙购物网(控制层)_第1张图片
下面我们来进行测试。测试之前修改一下首页文件index.jsp:
Web开发:西蒙购物网(控制层)_第2张图片
启动服务器,显示首页:
Web开发:西蒙购物网(控制层)_第3张图片
在地址栏里localhost:8080/simonshop/之后输入login?username=admin&password=12345之后敲回车:
Web开发:西蒙购物网(控制层)_第4张图片
Web开发:西蒙购物网(控制层)_第5张图片
我们用管理员的用户名与密码登录,确实跳转到后台的管理页面/backend/management.jsp,当然该页面尚未编写,因此报了个404错误。我们去看一下服务器端的控制台,结果如下:
Web开发:西蒙购物网(控制层)_第6张图片
用错误密码重新测试一下:
在这里插入图片描述
Web开发:西蒙购物网(控制层)_第7张图片
Web开发:西蒙购物网(控制层)_第8张图片
2、创建注销处理类LogoutServlet
Web开发:西蒙购物网(控制层)_第9张图片

启动服务器,测试注销类:
Web开发:西蒙购物网(控制层)_第10张图片
Web开发:西蒙购物网(控制层)_第11张图片
Web开发:西蒙购物网(控制层)_第12张图片
3、创建注册处理类RegisterServlet:
Web开发:西蒙购物网(控制层)_第13张图片

package net.hw.shop.servlet;
/**
 * 功能:处理用户注册
 * 作者:华卫
 * 日期:2019年12月9日
 */

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.Timestamp;

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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.User;
import net.hw.shop.service.UserService;

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求对象的字符编码
        request.setCharacterEncoding("utf-8");
        // 获取session对象
        HttpSession session = request.getSession();

        // 获取用户名
        String username = request.getParameter("username");
        // 获取密码
        String password = request.getParameter("password");
        // 获取电话号码
        String telephone = request.getParameter("telephone");
        // 设置注册时间(时间戳对象)
        Timestamp registerTime = new Timestamp(System.currentTimeMillis());
        // 设置用户为普通用户
        int popedom = 1;

        // 创建用户对象
        User user = new User();
        // 设置用户对象信息
        user.setUsername(username);
        user.setPassword(password);
        user.setTelephone(telephone);
        user.setRegisterTime(registerTime);
        user.setPopedom(popedom);

        // 创建UserService对象
        UserService userService = new UserService();
        // 调用UserService对象的添加用户方法
        int count = userService.addUser(user);

        // 判断是否注册成功
        if (count > 0) {
            // 设置session属性
            session.setAttribute("registerMsg", "恭喜,注册成功!");
            // 重定向到登录页面
            response.sendRedirect(request.getContextPath() + "/login.jsp");
            // 在控制台输出测试信息
            System.out.println("恭喜,注册成功,跳转到登录页面!");
        } else {
            // 设置session属性
            session.setAttribute("registerMsg", "遗憾,注册失败!");
            // 重定向到注册页面
            response.sendRedirect(request.getContextPath() + "/frontend/register.jsp");
            // 在控制台输出测试信息
            System.out.println("遗憾,注册失败,跳转到注册页面!");
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

下面我们来进行测试。启动服务器,访问http://localhost:8080/simonshop/register,敲回车,查看结果:
在这里插入图片描述
Web开发:西蒙购物网(控制层)_第14张图片
我们去服务器端控制台查看信息:
Web开发:西蒙购物网(控制层)_第15张图片
此时,我们去NaviCat查看用户表,看看是否插入了新的用户记录?
Web开发:西蒙购物网(控制层)_第16张图片
Web开发:西蒙购物网(控制层)_第17张图片
大家可以看到telephone字段长度为11,那么我们重启服务器再测试,让telephone的值超过11位,看看结果如何。
在这里插入图片描述
Web开发:西蒙购物网(控制层)_第18张图片
我们去服务器端控制台查看信息:
Web开发:西蒙购物网(控制层)_第19张图片
确实在控制台输出了“遗憾,注册失败,跳转到注册页面!”信息,并且捕获了一个异常。

4、创建显示类别处理类ShowCategoryServlet:
Web开发:西蒙购物网(控制层)_第20张图片

package net.hw.shop.servlet; 
/**
 * 功能:显示类别控制程序
 * 作者:华卫
 * 日期:2019年12月9日
 */

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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.Category;
import net.hw.shop.service.CategoryService;

@WebServlet("/showCategory")
public class ShowCategoryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 创建类别服务对象
        CategoryService categoryService = new CategoryService();
        // 获取全部商品类别
        List<Category> categories = categoryService.findAllCategories();
        // 获取session对象
        HttpSession session = request.getSession();
        // 把商品类别列表以属性的方式保存到session里
        session.setAttribute("categories", categories);
        // 重定向到显示商品类别页面(showCategory.jsp)
        response.sendRedirect(request.getContextPath() + "/frontend/showCategory.jsp");
        // 在服务器控制台输出测试信息
        for (Category category: categories) {
            System.out.println(category);
        }        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

下面我们来进行测试。
重启服务器,访问http://localhost:8080/simonshop/showCategory:
Web开发:西蒙购物网(控制层)_第21张图片
Web开发:西蒙购物网(控制层)_第22张图片
此时,我们到服务器端控制台查看输出的信息:
Web开发:西蒙购物网(控制层)_第23张图片
5、创建显示商品处理类ShowProductServlet:

package net.hw.shop.servlet; 
/**
 * 功能:显示商品列表的控制程序
 *     通过业务层访问后台数据,
 *     然后将数据返回给前台页面
 * 作者:华卫
 * 日期:2019年12月9日
 */

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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.Product;
import net.hw.shop.service.CategoryService;
import net.hw.shop.service.ProductService;

@WebServlet("/showProduct")
public class ShowProductServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取类别标识符
        int categoryId = Integer.parseInt(request.getParameter("categoryId"));
        // 创建商品类别服务对象
        CategoryService categoryService = new CategoryService();
        // 由类别标识符获取类别名
        String categoryName = categoryService.findCategoryById(categoryId).getName();
        // 创建商品服务对象
        ProductService productService = new ProductService();
        // 获取指定商品类别的商品列表
        List<Product> products = productService.findProductsByCategoryId(categoryId);
        // 获取session对象
        HttpSession session = request.getSession();
        // 把商品列表对象以属性的方式保存到session里
        session.setAttribute("products", products);
        // 重定向到显示商品信息页面
        response.sendRedirect(request.getContextPath() + "/frontend/showProduct.jsp?categoryName=" + categoryName);
        // 在服务器端控制台输出测试信息
        for (int i = 0; i < products.size(); i++) {
            System.out.println(products.get(i));
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

下面我们来进行测试。
重启服务器,访问http://localhost:8080/simonshop/showProduct?categoryId=1:
Web开发:西蒙购物网(控制层)_第24张图片
Web开发:西蒙购物网(控制层)_第25张图片
我们去服务器端控制台查看输出信息:
Web开发:西蒙购物网(控制层)_第26张图片
重启服务器,访问http://localhost:8080/simonshop/showProduct?categoryId=8:
Web开发:西蒙购物网(控制层)_第27张图片
没有类别号8,导致空指针异常,因此需要修改源代码。
Web开发:西蒙购物网(控制层)_第28张图片
重启服务器,访问http://localhost:8080/simonshop/showProduct?categoryId=8:
Web开发:西蒙购物网(控制层)_第29张图片
Web开发:西蒙购物网(控制层)_第30张图片
6、显示购物车处理类(ShowCartServlet)
Web开发:西蒙购物网(控制层)_第31张图片

package net.hw.shop.servlet;
/**
 * 功能:显示购物车控制程序
 * 作者:华卫
 * 日期:2019年12月14日
 */

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.Product;
import net.hw.shop.service.ProductService;

@WebServlet("/showCart")
public class ShowCartServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取商品类别标识符
        int categoryId = Integer.parseInt(request.getParameter("categoryId"));
        // 获取session对象
        HttpSession session = request.getSession();
        // 获取购物车
        LinkedHashMap<Integer, Integer> cart = (LinkedHashMap<Integer, Integer>) session.getAttribute("cart");

        // 判断购物车是否为空
        if (cart != null) {
            // 定义购物表
            List<HashMap<String, Object>> shoppingTable = new ArrayList<HashMap<String, Object>>();
            // 创建商品服务对象
            ProductService productService = new ProductService();
            // 购物总金额
            double totalPrice = 0.0;
            // 遍历购物车
            for (Integer id : cart.keySet()) {
                // 获取商品对象
                Product product = productService.findProductById(id);
                // 生成购物表记录
                HashMap<String, Object> shoppingItem = new HashMap<String, Object>();
                shoppingItem.put("id", product.getId());
                shoppingItem.put("name", product.getName());
                shoppingItem.put("price", product.getPrice());
                shoppingItem.put("amount", cart.get(id));
                shoppingItem.put("sum", product.getPrice() * cart.get(id));
                // 将购物表记录添加到购物表中
                shoppingTable.add(shoppingItem);
                // 累加购买总金额
                totalPrice = totalPrice + (Double) shoppingItem.get("sum");
            }

            // 将购物表和购买总金额保存到session里
            session.setAttribute("shoppingTable", shoppingTable);
            session.setAttribute("totalPrice", totalPrice);

            // 重定向到显示商品控制程序
            response.sendRedirect(request.getContextPath() + "/showProduct?categoryId=" + categoryId);
        } else {
            System.out.println("购物车里没有类别号为[" + categoryId + "]的商品!");
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

重启服务器,访问http://localhost:8080/simonshop/showCart?categoryId=1:
在这里插入图片描述
Web开发:西蒙购物网(控制层)_第32张图片
7、操作购物车处理类(OperateCartServlet)
Web开发:西蒙购物网(控制层)_第33张图片

package net.hw.shop.servlet; 
/**
 * 功能:操作购物车控制程序
 * 作者:华卫
 * 日期:2019年12月14日
 */

import java.io.IOException;
import java.util.LinkedHashMap;

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 net.hw.shop.service.ProductService;

@WebServlet("/operateCart")
public class OperateCartServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取商品标识符
        int id = Integer.parseInt(request.getParameter("id"));
        // 获取商品操作
        String operation = request.getParameter("operation");

        // 从session里获取购物车(键:商品标识符;值:购买数量)
        LinkedHashMap<Integer, Integer> cart = (LinkedHashMap<Integer, Integer>) request.getSession()
                .getAttribute("cart");
        // 判断购物车是否为空
        if (cart == null) {
            // 创建购物车
            cart = new LinkedHashMap<Integer, Integer>();
            // 将购物车保存到session里,便于用户在不同页面访问购物车
            request.getSession().setAttribute("cart", cart);
        }

        if (operation.equals("add")) {
            // 将商品添加到购物车
            if (cart.containsKey(id)) { // 该商品已购买过
                // 购买数量增加1
                cart.put(id, cart.get(id) + 1);
            } else { // 该商品未曾购买
                // 购买数量设置为1
                cart.put(id, 1);
            }
        } else if (operation.equals("delete")){
            // 将商品从购物车删除
            if (cart.get(id) > 1) {
                // 购买数量减少1
                cart.put(id, cart.get(id) - 1);
            } else {
                // 从购物车里删除该商品
                cart.remove(id);
            }
        }

        // 创建商品服务对象
        ProductService productService = new ProductService();
        // 获取该商品类别标识符
        int categoryId = productService.findProductById(id).getCategoryId();
        // 重定向到显示购物车控制程序
        response.sendRedirect(request.getContextPath() + "/showCart?categoryId=" + categoryId);
    }
}

8、生成订单处理类(MakeOrderServlet)
Web开发:西蒙购物网(控制层)_第34张图片

package net.hw.shop.servlet;
/**
 * 功能:生成订单控制程序
 * 作者:华卫
 * 日期:2019年12月14日
 */

import java.io.IOException;
import java.sql.Timestamp;
import java.util.Date;
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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.Order;
import net.hw.shop.bean.User;
import net.hw.shop.service.OrderService;
import net.hw.shop.service.UserService;
import net.hw.shop.service.OrderService;
import net.hw.shop.service.UserService;

@WebServlet("/makeOrder")
public class MakeOrderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求对象的字符编码
        request.setCharacterEncoding("utf-8");
        // 获取表单提交数据
        String username = request.getParameter("username");
        String telephone = request.getParameter("telephone");
        Double totalPrice = Double.parseDouble(request.getParameter("totalPrice"));
        String deliveryAddress = request.getParameter("deliveryAddress");
        // 创建订单对象
        Order order = new Order();
        // 设置订单属性
        order.setUsername(username);
        order.setTotalPrice(totalPrice);
        order.setTelephone(telephone);
        order.setDeliveryAddress(deliveryAddress);
        order.setOrderTime(new Date());
        // 创建订单服务
        OrderService orderService = new OrderService();
        // 添加订单
        orderService.addOrder(order);
        // 获取最后一个订单
        Order lastOrder = orderService.findLastOrder();
        // 保存到session里
        request.getSession().setAttribute("lastOrder", lastOrder);
        // 重定向到显示订单页面
        response.sendRedirect(request.getContextPath() + "/frontend/showOrder.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

9、支付处理类(PayServlet)
Web开发:西蒙购物网(控制层)_第35张图片

package net.hw.shop.servlet;
/**
 * 功能:支付处理程序
 * 作者:华卫
 * 日期:2019年12月14日
 */

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 java.io.IOException;

@WebServlet("/pay")
public class PayServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求对象的字符编码
        request.setCharacterEncoding("utf-8");
        ///
        // 待做部分
        // 设置session失效
        request.getSession().invalidate();
        // 重定向到登录页面
        response.sendRedirect(request.getContextPath() + "/login.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

10、显示用户处理类(ShowUserServlet)
Web开发:西蒙购物网(控制层)_第36张图片

package net.hw.shop.servlet;
/**
 * 功能:显示用户控制程序
 * 作者:华卫
 * 日期:2019年12月14日
 */

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 javax.servlet.http.HttpSession;

import net.hw.shop.bean.User;
import net.hw.shop.service.UserService;

@WebServlet("/showUser")
public class ShowUserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 创建用户服务对象
        UserService userService = new UserService();
        // 获取全部用户
        List<User> users = userService.findAllUsers();
        // 获取session对象
        HttpSession session = request.getSession();
        // 把用户列表以属性的方式保存到session里
        session.setAttribute("users", users);
        // 重定向到显示用户页面(showUser.jsp)
        response.sendRedirect(request.getContextPath() + "/backend/showUser.jsp");
        // 在控制台输出所有用户信息
        for (User user: users) {
            System.out.println(user);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

重启服务器,访问http://localhost:8080/simonshop/showUser:
Web开发:西蒙购物网(控制层)_第37张图片
Web开发:西蒙购物网(控制层)_第38张图片
我们去服务器端控制台查看输出信息:
Web开发:西蒙购物网(控制层)_第39张图片
控制层的工作告一个段落,我们在【Java Web实训项目:西蒙购物网(下)】里完成展示层的工作。

你可能感兴趣的:(Web开发:西蒙购物网(控制层))