购物网站测试(二)

(八)控制层(XXXServlet)

1、登录处理类LoginServlet
在这里插入图片描述
package net.hw.shop.servlet;
/**

  • 功能:登录处理类
  • 日期:2019年12月11日
    */

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

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

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

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // 设置请求对象的字符编码
    request.setCharacterEncoding("utf-8");
    // 获取会话对象
    HttpSession session = request.getSession();
    // 获取用户名
    String username = request.getParameter("username");
    // 获取密码
    String password = request.getParameter("password");
    // 定义用户服务对象
    UserService userService = new UserService();
    // 执行登录方法,返回用户实体
    User user = userService.login(username, password);
    // 判断用户登录是否成功
    if (user != null) {
        // 设置session属性
        session.setMaxInactiveInterval(5 * 60);
        session.setAttribute("username", username);
        session.removeAttribute("loginMsg");
        // 根据用户权限跳转到不同页面
        if (user.getPopedom() == 0) {
            System.out.println("用户登录成功,进入后台管理!");
            response.sendRedirect(request.getContextPath() + "/backend/management.jsp");
        } else if (user.getPopedom() == 1) {
            System.out.println("用户登录成功,进入前台显示类别!");
            response.sendRedirect(request.getContextPath() + "/showCategory");
        }
    } else {
        System.out.println("用户名或密码错误,用户登录失败!");
        // 设置session属性loginMsg
        session.setAttribute("loginMsg", "用户名或密码错误!");
        response.sendRedirect(request.getContextPath() + "/login.jsp");
    }
}

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

}

测试之前修改一下首页文件index.jsp:
在这里插入图片描述
启动
在这里插入图片描述
得到该网页
在这里插入图片描述
在地址栏里localhost:8080/simonshop/之后输入login?username=admin&password=12345之后敲回车:
在这里插入图片描述
在这里插入图片描述
我们用管理员的用户名与密码登录,确实跳转到后台的管理页面/backend/management.jsp,当然该页面尚未编写,因此报了个404错误。我们去看一下服务器端的控制台,结果如下:
在这里插入图片描述
重启服务器,再测试一下:
换成login?username=温志军&password=22222
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重启服务器,再测试一下:
换成login?username=郑晓红&password=111111
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、注销处理类LogoutServlet
在这里插入图片描述
package net.hw.shop.servlet;
/**

  • 功能:注销处理类
  • 日期:2019年12月9日
    */

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;

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

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {        
    // 让session失效
    request.getSession().invalidate();
    // 重定向到登录页面
    response.sendRedirect(request.getContextPath() + "/login.jsp");
    System.out.println("用户注销成功!");
}

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

}

下面我们来进行测试。启动服务器,先要登录成功,然后再测试注销功能。
先使用管理员登录,测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时返回登录页面
在这里插入图片描述
此时,我们去服务器端控制台查看信息:
在这里插入图片描述
3、注册处理类RegisterServlet
在这里插入图片描述
package net.hw.shop.servlet;
/**

  • 功能:处理用户注册
  • 日期:2019年12月11日
    */

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?username=萌萌哒&password=55555&telephone=15896961234,敲回车,查看结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时,我们去NaviCat查看用户表,看看是否插入了新的用户记录?
在这里插入图片描述
在这里插入图片描述
大家可以看到telephone字段长度为11,那么我们重启服务器再测试,让telephone的值超过11位,看看结果如何。
这里我们输入register?username=萨瓦迪卡&password=54321&telephone=1234567899874
在这里插入图片描述
在这里插入图片描述
确实在控制台输出了“遗憾,注册失败,跳转到注册页面!”信息,但是还抛出了一个异常:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘telephone’ at row 1
在这里插入图片描述
在这里插入图片描述
现在继续测试密码超过20位的
我们输入
register?username=萨瓦迪卡&password=123456789123456789123456789&telephone=13419354366
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再测试用户超过20位的情况
我们输入register?username=shimenggwuwangz123456&password=12345&telephone=13419354366
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、显示类别处理类ShowCategoryServlet
在这里插入图片描述
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:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、显示商品处理类ShowProductServlet
在这里插入图片描述
package net.hw.shop.servlet;
/**

  • 功能:显示商品列表的控制程序
  • 通过业务层访问后台数据,
    
  • 然后将数据返回给前台页面
    
  • 日期:2019年12月11日
    */

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
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们输入没有的categoryID=5
http://localhost:8080/simonshop/showProduct?categoryId=5
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191211091931578.png
在这里插入图片描述
在这里插入图片描述
因为我们这里 没有categoryID为5的商品类,导致空指针异常,因此需要修改源代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、显示购物车处理类(ShowCartServlet)
在这里插入图片描述
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
在这里插入图片描述
在这里插入图片描述

7、操作购物车处理类(OperateCartServlet)
在这里插入图片描述
/**

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

import net.hw.shop.service.ProductService;

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;

@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)
在这里插入图片描述
/**

  • 功能:生成订单控制程序
  • 日期:2016年12月11日
    */
    package net.hw.shop.servlet;

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

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;

@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);
}

}

测试
我们输入
http://localhost:8080/simonshop/MakeOrderServlet?username=王小二&telephone&totalPrice=3000&deliveryAddresss=泸州职业技术学院
在这里插入图片描述
9、支付处理类(PayServlet)
在这里插入图片描述
/**

  • 功能:支付处理程序
  • 日期:2019年12月11日
    */
    package net.hw.shop.servlet;

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;

@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)
在这里插入图片描述

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
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值