Java web应用案例:西蒙购物网(中)

Java Web实训项目:西蒙购物网(中)

四、实现步骤

(八)控制层(XXXServlet)

在src里创建net.hw.shop.servlet包,在里面创建各种控制处理类。

1、登录处理类LoginServlet

Java web应用案例:西蒙购物网(中)_第1张图片

package net.azc.shop.servlet;

/**
 * 功能:登录处理类
 * 作者:azc
 * 日期: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;
import javax.servlet.http.HttpSession;

import net.azc.shop.bean.User;
import net.azc.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() + "/frontend/showCategory");
            }
        } else {
            System.out.println("用户名或密码错误,用户登陆失败!");
            // 设置session属性
            session.setAttribute("loginMsg", "用户名或密码错误!");
            response.sendRedirect(request.getContextPath() + "/login.jsp");
        }
    }

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

查看用户和密码:
Java web应用案例:西蒙购物网(中)_第2张图片

进行测试:

Java web应用案例:西蒙购物网(中)_第3张图片
但是这里会有报错
Java web应用案例:西蒙购物网(中)_第4张图片
我们用管理员的用户名与密码登录,确实跳转到后台的管理页面/backend/management.jsp,当然该页面尚未编写,因此报了个404错误。我们去看一下服务器端的控制台,结果如下:
Java web应用案例:西蒙购物网(中)_第5张图片
再测试一下其他的用户:
Java web应用案例:西蒙购物网(中)_第6张图片
还是会报同样的错误:
Java web应用案例:西蒙购物网(中)_第7张图片
去看一下服务器端的控制台,结果如下:
Java web应用案例:西蒙购物网(中)_第8张图片
再次测试,这次我把用户名或密码写错:
Java web应用案例:西蒙购物网(中)_第9张图片
Java web应用案例:西蒙购物网(中)_第10张图片
Java web应用案例:西蒙购物网(中)_第11张图片

2、注销处理类LogoutServletJava web应用案例:西蒙购物网(中)_第12张图片

这个注销处理,要先登陆了才能注销
下面进行测试:
Java web应用案例:西蒙购物网(中)_第13张图片
因为要跳转的页面没写,所以有错:
Java web应用案例:西蒙购物网(中)_第14张图片
Java web应用案例:西蒙购物网(中)_第15张图片
下面测试注销功能:
Java web应用案例:西蒙购物网(中)_第16张图片
Java web应用案例:西蒙购物网(中)_第17张图片
Java web应用案例:西蒙购物网(中)_第18张图片
还是会报错,但是去服务器控制台可以看到已经注销成功:
Java web应用案例:西蒙购物网(中)_第19张图片

3、注册处理类RegisterServlet

Java web应用案例:西蒙购物网(中)_第20张图片

package net.azc.shop.servlet;

/**
 * 功能:处理用户注册
 * 作者:azc
 * 日期: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.azc.shop.bean.User;
import net.azc.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);
    }
}

下面进行测试:
启动服务器
Java web应用案例:西蒙购物网(中)_第21张图片
Java web应用案例:西蒙购物网(中)_第22张图片
去服务器端控制台查看信息:
Java web应用案例:西蒙购物网(中)_第23张图片
去Navicat查看是否插入了新纪录:
Java web应用案例:西蒙购物网(中)_第24张图片
下面测试一下错误的注册会怎么样:
Java web应用案例:西蒙购物网(中)_第25张图片
我们设计表的时候,电话项设计为11位数,现在我注册新用户,故意多写几位:
重启服务器:
Java web应用案例:西蒙购物网(中)_第26张图片
超过规定长度,那么肯定就无法插入新的用户记录
Java web应用案例:西蒙购物网(中)_第27张图片
去服务器端控制台查看:
Java web应用案例:西蒙购物网(中)_第28张图片

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'telephone' at row 1

这个问题出在模型层,应该在UserDaoImpl里的insert方法
只需要将catch字句里的e.printStackTrace();改成System.err.println();即可。
Java web应用案例:西蒙购物网(中)_第29张图片
重启,再次测试错误的插入记录:
Java web应用案例:西蒙购物网(中)_第30张图片
Java web应用案例:西蒙购物网(中)_第31张图片
Java web应用案例:西蒙购物网(中)_第32张图片

4、显示商品类别处理类ShowCategoryServlet

Java web应用案例:西蒙购物网(中)_第33张图片

package net.azc.shop.servlet;

/**
 * 功能:显示类别控制程序
 * 作者:azc
 * 日期:2016年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.azc.shop.bean.Category;
import net.azc.shop.service.CategoryService;
//import net.azc.shop.service.impl.CategoryServiceImpl;

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

重启服务器:
Java web应用案例:西蒙购物网(中)_第34张图片
Java web应用案例:西蒙购物网(中)_第35张图片
到服务器端控制台查看:
Java web应用案例:西蒙购物网(中)_第36张图片

5、显示商品处理类ShowProductServlet

Java web应用案例:西蒙购物网(中)_第37张图片

package net.azc.shop.servlet;

/**
 * 功能:显示商品列表的控制程序
 *      通过业务层访问后台数据,
 *      然后将数据返回给前台页面
 * 作者:azc
 * 日期:2016年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.azc.shop.bean.Product;
import net.azc.shop.service.CategoryService;
import net.azc.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);
    }
}

开始测试:
重启服务器
Java web应用案例:西蒙购物网(中)_第38张图片
Java web应用案例:西蒙购物网(中)_第39张图片
到服务器端控制台查看:
Java web应用案例:西蒙购物网(中)_第40张图片

你可能感兴趣的:(Java web应用案例:西蒙购物网(中))