zoukankan      html  css  js  c++  java
  • Web购物车案例(servlet+bean+jsp)

    一些B话

    事情来得太突然,一个朋友说是要我帮忙做一个JavaWeb的课程设计,在过一天就要去答辩了…
    这我哪受的了时间这么短还没有~~~,正准备委婉的拒绝的时候他说写完之后给我那个啥…
    好吧,我就是这么庸俗

    那好吧,泡杯雀巢(特浓)开工。


    项目要求

    项目要求

    1. 项目要简单,保证小白都能大概了解这段代码是什么意思,用最简单的实现。
    2. 他们老师要他们用MyEclipse,而且还是那种超级老的那种版本(我从开始学Java就一直用的是IDEA,Eclipse创建一个WEB项目都需要百度)。

    项目目录结构

    在这里插入图片描述

    这是我快做完的时候他给他瞧瞧的项目结构,竟然看不懂,那就只能改了。
    在这里插入图片描述

    这是把一些接口继承干掉之后的目录结构。

    • src(这是IDEA的目录结构)
      • dao (操作数据库类)
        • GoodsDaoImpl.java(商品数据表增删改查)
        • IndentDaoImpl.java(订单数据库增删改查)
        • IndentListDaoImpl.java(订单跟商品关联数据库增删改查)
        • UserDaoImpl.java(用户数据库增删改查)
      • db
        • DBConnectionManager.java (获得数据库连接)
      • entity(实体类,也就是Bean类)
        • Goods.java (商品)
        • GoodsClass.java(商品所属的类目)
        • Indent.java(订单)
        • IndentList.java(订单跟商品关联)
        • ShopUser.java(用户)
      • servlet(servlet类,主要用来处理请求)
        • GoodsServlet.java(主要用来商品请求处理)
        • IndentServlet.java(主要用来订单请求处理)
        • UserServlet.java(主要用来用户请求处理)
    • web
      • WEB-INF
        • lib
        • web.xml
      • abUserLogin.jsp(管理员登录)
      • adIndentManage.jsp(管理员管理订单界面)
      • adManage.jsp(管理员管理中心)
      • getAllGoods.jsp(管理员管理商品界面)
      • getAllUser.jsp(管理员管理用户界面)
      • goodsUpdate.jsp(商品信息修改界面)
      • index.jsp(首页)
      • userCart.jsp(用户购物车界面)
      • userCenter.jsp(用户中心界面)
      • userIndent.jsp(用户订单界面)
      • userLogin.jsp(用户登录界面)
      • userRegistration.jsp(用户注册界面)
      • userUpdate.jsp(用户资料修改界面)

    上面就是最后的目录结构,应该很容易理解吧。


    主要代码片段

    这里描述的是这个项目的关键地方,懂了这里,整个项目就不在话下。

    最主要的就是那三个servlet,也就是controller类.

    这里是 UserServlet.java。

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String action = req.getParameter("action");
            switch (action) {
                case "adLogin": {
                    // 判断管理员密码是否正确
                    login(req, resp, 1);
                }
                break;
                case "login": {
                    // 判断用户密码是否正确
                    login(req, resp, 0);
                }
                break;
                case "loginOut": {
                    // 退出登录
                    loginOut(req, resp, 0);
                }
                break;
                case "showAllUsers": {
                    // 显示所有用户
                    showAllUsers(req, resp);
                }
                break;
                case "delUser": {
                    // 删除用户
                    delUser(req, resp);
                }
                break;
                case "updateUser": {
                    // 更新
                    updateUser(req, resp);
                }
                break;
                case "insertUser": {
                    // 插入用户
                    insertUser(req, resp);
                }
            }
        }
    

    几乎所有有关用户的请求都经过这里,根据传过来的action指令不同,调用不同的方法来然后相应的结果或者是页面。

    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String action = req.getParameter("action");
    
            if (action.equals("showAllIndents")){showAllIndents(req, resp);}
    
            else if (action.equals("showAllUserIndents")){showAllUserIndents(req, resp);}
            else if (action.equals("delIndent")){delIndent(req, resp);}
            else if (action.equals("payout")){payout(req, resp);}
    
            switch (action) {
                // 显示所有订单
                case "showAllIndents": {
                    showAllIndents(req, resp);
                }
                break;
                // 显示所有用户订单
                case "showAllUserIndents": {
                    showAllUserIndents(req, resp);
                }
                break;
                // 删除订单
                case "delIndent": {
                    delIndent(req, resp);
                }
                break;
                // 支付,等价于生成订单
                case "payout": {
                    payout(req, resp);
                }
                break;
            }
        }
    

    在处理订单和商品的的请求时也是用了同样的道理。接下类的代码就不BB了,可以在GitHub
    上取,里面写了我自认为蛮多的代码。


    项目展示

    朋友说要做最简单的,那我就做最简单的哦。

    这是首页
    在这里插入图片描述

    这里是商品中心也就是用户中心
    在这里插入图片描述在这里插入图片描述

    简单吗


    SQL

    -- phpMyAdmin SQL Dump
    -- version 4.4.15.10
    -- https://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generation Time: 2019-06-19 15:15:18
    -- 服务器版本: 5.7.19-log
    -- PHP Version: 5.4.45
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- Database: `jsp_shop`
    --
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `ad_users`
    --
    
    CREATE TABLE IF NOT EXISTS `ad_users` (
      `id` int(11) NOT NULL,
      `username` varchar(50) NOT NULL,
      `password` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `ad_users`
    --
    
    INSERT INTO `ad_users` (`id`, `username`, `password`) VALUES
    (1, 'admin', 'admin');
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `goods`
    --
    
    CREATE TABLE IF NOT EXISTS `goods` (
      `id` int(11) NOT NULL,
      `goodsClassId` int(11) NOT NULL,
      `goodname` varchar(20) NOT NULL,
      `price` float NOT NULL,
      `amount` int(11) NOT NULL,
      `leave_amount` int(11) NOT NULL,
      `img` varchar(200) DEFAULT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `goods`
    --
    
    INSERT INTO `goods` (`id`, `goodsClassId`, `goodname`, `price`, `amount`, `leave_amount`, `img`) VALUES
    (4, 1, 'zzz', 43, 0, 54, 'https://img12.360buyimg.com/n7/jfs/t1/63005/7/2162/346204/5d073a88E037d277f/ad359511de220251.jpg'),
    (6, 1, '阿迪达斯', 499, 100, 13, 'https://img10.360buyimg.com/n7/jfs/t1/19909/3/6832/54742/5c62746fE4ca54219/dd9fd5234e80ca56.jpg'),
    (8, 2, '男士levis外套', 300, 100, 16, 'https://img13.360buyimg.com/n8/jfs/t1/82625/13/358/355493/5ce8ada3E190147ae/28d18a09922d5084.jpg'),
    (13, 5, '男士休闲包', 299, 100, 18, 'https://img13.360buyimg.com/n7/jfs/t1/62078/7/1965/323619/5d04b1c2E0270ed58/3bdfde61f9b6abe4.jpg');
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `goodsclass`
    --
    
    CREATE TABLE IF NOT EXISTS `goodsclass` (
      `id` int(11) NOT NULL,
      `classname` varchar(30) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `goodsclass`
    --
    
    INSERT INTO `goodsclass` (`id`, `classname`) VALUES
    (1, '男鞋'),
    (2, '男士外套'),
    (5, '男士挎包');
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `indent`
    --
    
    CREATE TABLE IF NOT EXISTS `indent` (
      `id` int(11) NOT NULL,
      `indentNo` varchar(20) NOT NULL,
      `userId` int(11) NOT NULL,
      `totalPrice` float DEFAULT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `indent`
    --
    
    INSERT INTO `indent` (`id`, `indentNo`, `userId`, `totalPrice`) VALUES
    (72, 'HYD-34-71', 34, NULL),
    (73, 'HYD-34-72', 34, 123),
    (74, 'HYD-34-73', 34, 123),
    (75, 'HYD-34-74', 34, 123);
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `indentlist`
    --
    
    CREATE TABLE IF NOT EXISTS `indentlist` (
      `id` int(11) NOT NULL,
      `indentId` int(11) NOT NULL,
      `goodId` int(11) NOT NULL,
      `amount` int(11) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `indentlist`
    --
    
    INSERT INTO `indentlist` (`id`, `indentId`, `goodId`, `amount`) VALUES
    (70, 72, 4, 1),
    (71, 73, 6, 3),
    (72, 74, 4, 1),
    (73, 75, 4, 1);
    
    -- --------------------------------------------------------
    
    --
    -- 表的结构 `users`
    --
    
    CREATE TABLE IF NOT EXISTS `users` (
      `id` int(11) NOT NULL,
      `username` varchar(20) NOT NULL,
      `password` varchar(20) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8;
    
    --
    -- 转存表中的数据 `users`
    --
    
    INSERT INTO `users` (`id`, `username`, `password`) VALUES
    (34, '123', '123'),
    (36, '321', '321'),
    (38, '543543', '54353475'),
    (39, '9789', '9879');
    
    --
    -- Indexes for dumped tables
    --
    
    --
    -- Indexes for table `goods`
    --
    ALTER TABLE `goods`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Indexes for table `goodsclass`
    --
    ALTER TABLE `goodsclass`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Indexes for table `indent`
    --
    ALTER TABLE `indent`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Indexes for table `indentlist`
    --
    ALTER TABLE `indentlist`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Indexes for table `users`
    --
    ALTER TABLE `users`
      ADD PRIMARY KEY (`id`);
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    --
    -- AUTO_INCREMENT for table `goods`
    --
    ALTER TABLE `goods`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=21;
    --
    -- AUTO_INCREMENT for table `goodsclass`
    --
    ALTER TABLE `goodsclass`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6;
    --
    -- AUTO_INCREMENT for table `indent`
    --
    ALTER TABLE `indent`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=76;
    --
    -- AUTO_INCREMENT for table `indentlist`
    --
    ALTER TABLE `indentlist`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=74;
    --
    -- AUTO_INCREMENT for table `users`
    --
    ALTER TABLE `users`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=40;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    
    

    还有一些B话

    • 项目在GitHub
    • 项目写完了远程给别人配置环境也是一件麻烦事,我用IDEA写的,而我朋友都不知道IDEA是啥,还要我找同学把IDEA的项目转成Eclipse的目录格式,发过去之后,一打开就是乱码,又要去百度解决乱码,乱码解决启动有报错,一看才发现是JDK6,又要去安装JDK8,JDK解决tomcat运行又出错,说是web.xml不支持4.0的版本,又要去百度解决,这些都弄好之后页面登录的时候又报错,说是JSP里面的几句代码又又错,问题是在我这和我同学那里毫无问题啊,找了半天找不出来,emm,干脆就把那几句给删了,最后才勉勉强强跑起来。
    • 中途我一直要他下新版本的Eclipse就不会有问题,这个MyEclipse的版本太低了,他说我老师就只交过我们这个,老师要求我们用这个…
    • 说真的,我们JSP老师第一次给我们上课,一打开电脑发现是XP系统,还要运行一个装在虚拟机里面的Eclipse,说是装在虚拟机里面不会影响电脑性能… 反正我上课就没再听过了,坐最后一排自己干自己的。
  • 相关阅读:
    第三方网站实现绑定微信登陆
    安卓微信中bootstrap下拉菜单无法正常工作的解决方案
    一个Web钢琴谱记忆工具
    腾讯实习生面试经历-15年3月-Web前端岗
    AngularJS自定义指令三种scope
    AngularJS在自定义指令中传递Model
    Canvas文本绘制的浏览器差异
    AngularJS学习笔记
    善用width:auto以及white-space:nowrap以防止布局被打破
    Timeline中frame mode帧模式中idle占据大片位置
  • 原文地址:https://www.cnblogs.com/neverth/p/11760934.html
Copyright © 2011-2022 走看看