day04-功能实现03

[复制链接]
发表于 2022-12-17 23:37:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
家居网购项目实现03

8.功能07-后台管理 显示家居

8.1需求分析/图解


  • 给后台管理提供独立登录页面,管理员登录地址不对外公开
  • 管理员登录成功后,显示管理菜单页面
  • 管理员点击家居管理,显示所有家居信息
8.2思路分析

ps:实现管理员登录功能,方案一是将管理员视为member,添加到member表中,为了区别管理员和用户的权限,添加一个字段即可;方案二是重新创建一张admin表,单独存储admin信息。
这里采用方案二。
8.3代码实现

8.3.1admin表和furn表

admin表:
  1. -- 创建admin表
  2. CREATE TABLE `admin`(
  3. `id` INT PRIMARY KEY AUTO_INCREMENT,
  4. `username` VARCHAR(32) NOT NULL UNIQUE,
  5. `password` VARCHAR(32) NOT NULL,
  6. `email` VARCHAR(64)
  7. )CHARSET utf8 ENGINE INNODB;
  8. -- 插入测试数据
  9. INSERT INTO admin (`username`,`password`,`email`)
  10. VALUES('admin',MD5('admin'),'[email protected]');
  11. SELECT * FROM admin;
复制代码
furn表:
  1. -- 设计家居表furn
  2. -- 根据 需求-文档-界面 设计字段
  3. -- 注意:id int(11), 11为显示的宽度,配合零填充(zerofill)
  4. --                 int(2), 2表示的也是显示宽度
  5. -- 也就是说, int(11)和int(2)存储的范围是一样的,两者存放的数据范围只和int相关
  6. -- 例如,67890使用int(11)来存储,显示为 00000067890
  7. --             67890使用int(2)来存储,显示为 67890
  8. -- 也就是说,当存储的数据位数不够时,使用0来填充剩下的宽度(零填充)
  9. CREATE TABLE `furn`(
  10. `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, #id-使用无符号
  11. `name` VARCHAR(64) NOT NULL, #家居名
  12. `maker` VARCHAR(64) NOT NULL, #制造商
  13. `price` DECIMAL(11,2) NOT NULL, #价格 建议用DECIMAL定点数
  14. `sales` INT UNSIGNED NOT NULL, #销量
  15. `stock` INT UNSIGNED NOT NULL, #库存
  16. `img_path` VARCHAR(256) NOT NULL #存放图片的路径即可,不建议直接存放图片到数据库中
  17. )CHARSET utf8 ENGINE INNODB;
  18. -- 增加测试数据
  19. INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`)
  20. VALUES(NULL,'北欧风格小桌子','熊猫家居',180,666,7,'assets/images/product-image/6.jpg');
  21. INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`)
  22. VALUES(NULL,'简约风格小椅子','熊猫家居',180,666,7,'assets/images/product-image/4.jpg');
  23. INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`)
  24. VALUES(NULL,'典雅风格小台灯','蚂蚁家居',180,666,7,'assets/images/product-image/14.jpg');
  25. INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`)
  26. VALUES(NULL,'温馨风格盆景架','蚂蚁家居',180,666,7,'assets/images/product-image/16.jpg');
  27. SELECT * FROM `furn`;
复制代码
8.3.2管理员登录功能

管理员登录功能实现参考:功能04-会员登录
详细代码请看 https://github.com/liyuelian/furniture_mall.git

  • entity层增加Admin实体,进行admin表映射。
  • dao层增加AdminDAO接口,,由AdminDAOImpl实现该接口方法,同时AdminDAOImpl继承BasicDAO,用于查询数据库中有无对应Admin用户返回对应信息
  • utils包创建AdminDAOImplTest类并测试
  • Service层创建AdminService接口,AdminServiceImpl实现该接口
  • utils包中创建AdminServiceImplTest类并测试
  • web层创建AdminServlet并配置,该Servlet对接前端页面。根据功能06-web层Servlet减肥中的方法,AdminServlet直接继承BasicServlet,只需要在AdminServlet编写业务代码即可,不需要实现doPost方法。doPost由抽象父类BasicServlet使用反射+动态绑定回调
    AdminServlet:
    1. package com.li.furns.web;
    2. import com.li.furns.entity.Admin;
    3. import com.li.furns.service.AdminService;
    4. import com.li.furns.service.impl.AdminServiceImpl;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. /**
    10. * @author 李
    11. * @version 1.0
    12. */
    13. public class AdminServlet extends BasicServlet {
    14.     private AdminService adminService = new AdminServiceImpl();
    15.     public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16.         //获取用户输入的账号密码
    17.         String username = request.getParameter("username");
    18.         String password = request.getParameter("password");
    19.         //构建一个Admin对象
    20.         Admin admin = new Admin(null, username, password, null);
    21.         if (adminService.login(admin) == null) {
    22.             //登录失败,返回管理员登录页面并提示错误信息
    23.             request.setAttribute("errInfo", "登录失败,账号信息有误");
    24.             request.getRequestDispatcher("/views/manage/manage_login.jsp")
    25.                     .forward(request, response);
    26.         } else {
    27.             //登录成功,跳转到manage_menu.jsp
    28.             request.getRequestDispatcher("/views/manage/manage_menu.jsp")
    29.                     .forward(request, response);
    30.         }
    31.     }
    32. }
    复制代码
  • 修改前端页面manage_login.jsp(登录表单提交注意添加隐藏域)
8.3.3显示家居功能

详细代码请看 https://github.com/liyuelian/furniture_mall.git

  • entity层增加Furn实体
    这里如果Furn实体的属性名和对应表的字段不一致,可以通过给查询的字段起别名的方法解决

  • dao层增加FurnDAO接口,由FurnDAOImpl实现该接口,同时继承BasicDAO,用于查询数据库furn表中的所有信息
  • utils包创建FurnDAOImplTest类并测试
  • service层添加FurnService接口,由FurnServiceImpl实现该接口
  • utils包创建FurnServiceImplTest类并测试
  • web层创建FurnServlet并配置(配置的url为/manage/furnServlet,目的是为了之后使用过滤器可以更好地限制访问权限),该Servlet对接前端页面。直接继承BasicServlet,只需要在Servlet中编写业务代码即可。
    1. package com.li.furns.web;
    2. import com.li.furns.entity.Furn;
    3. import com.li.furns.service.FurnService;
    4. import com.li.furns.service.impl.FurnServiceImpl;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. import java.util.List;
    10. public class FurnServlet extends BasicServlet {
    11.     private FurnService furnService = new FurnServiceImpl();
    12.    
    13.     protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    14.         List<Furn> furns = furnService.queryFurns();
    15.         //将furns集合放入到request域中
    16.         req.setAttribute("furns", furns);
    17.         //请求转发
    18.         req.getRequestDispatcher("/views/manage/furn_manage.jsp")
    19.                 .forward(req, resp);
    20.     }
    21. }
    复制代码
  • 在对接的前端页面furn_manage.jsp,使用jstl将接收到的家居集合显示出来
8.3.4整合管理员登录和显示家居功能

上述两个功能的流程为,管理员登录后由AdminServlet请求转发到manage_menu.jsp页面,点击页面上的“家居管理”,FurnServlet请求转发到furn_manage.jsp页面,该页面显示所有家居信息。
8.4完成测试

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表