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,說是裝在虛擬機里面不會影響電腦性能… 反正我上課就沒再聽過了,坐最后一排自己干自己的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM