一些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,说是装在虚拟机里面不会影响电脑性能… 反正我上课就没再听过了,坐最后一排自己干自己的。

Web购物车案例(servlet+bean+jsp)的更多相关文章

  1. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

  2. web.xml中servlet, bean, filter, listenr 加载顺序汇总

    最终得出结果:先 listener >> filter >> servlet >> spring 所以,如果过滤器中要使用到 bean,可以将spring 的加载 ...

  3. 第一个web 程序(servlet 和 jsp )&

    开发工具是便于程序员的编写,真正运行的代码不是编写的代码,而是tomcat服务器中部署好的代码.tomcat 会根据请求自动调用对应的代码进行请求处理. 可能遇到的问题: 1. 没有classes文件 ...

  4. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  5. java web中servlet、jsp、html 互相访问的路径问题

    java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...

  6. Java开发工程师(Web方向) - 02.Servlet技术 - 第4章.JSP

    第4章--JSP JSP JSP(Java Server Pages) - 中文名:Java服务器页面 动态网页技术标准 JSP = Html + Java + JSP tags 在服务器端执行,返回 ...

  7. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  8. Web 小案例 -- 网上书城(三)

    内容有点乱,有兴趣的同伙可依照后面的案例结构结合文章进行阅读 和网上购买东西一样,你可以在不登录的状态下去浏览商品,但是当你想把自己中意的东西加入购物车或是收藏起来就需要你拥有自己的账号然后登录后才可 ...

  9. java web学习笔记-Servlet篇

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

随机推荐

  1. Redis 主从,哨兵,集群实战

    下载地址及版本说明 Redis 各版本下载地址: http://download.redis.io/releases/ 版本说明:一般来说版本号第二位,偶数是稳定版本,奇数是在开发中的版本 本文基于R ...

  2. Hadoop源代码点滴-自然常数e

    数学里的 e 为什么叫做自然底数?是不是自然界里什么东西恰好是 e? https://www.zhihu.com/question/20296247

  3. zookeeper 都有哪些使用场景?

    面试题 zookeeper 都有哪些使用场景? 面试官心理分析 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些 ...

  4. javaweb中文中乱码分析与解决

    要想解决乱码的问题, 最好的办法是先弄清楚javaweb中数据传送的原理. 本文件将简单的讲解客户端的请求和服务器响应中编码的转换过程, 以及如何解决乱码的 问题. request(req):  se ...

  5. Stanford公开课《编译原理》学习笔记(2)递归下降法

    目录 一. Parse阶段 CFG Recursive Descent(递归下降遍历) 二. 递归下降遍历 2.1 预备知识 2.2 多行语句的处理思路 2.3 简易的文法定义 2.4 文法产生式的代 ...

  6. Creator3D长什么样?看看官方惊艳的DEMO就知道了,附在线体验!

    Shawn 这两天在学习 Creator3D 的官方案例,由于是刚接触 Creator3D 很多东西在没弄清楚之前还是以简单的编辑介绍为主,先了解一下3D场景的基本操作: 观查场景:按住鼠标右键以自己 ...

  7. UVa12105 越大越好

    题文:https://vjudge.net/problem/12364(或者见紫书) 题解: 因为题目中有两个限制条件,那么我们就顺着题目的意思来dp,设dp[i][j]表示目前还剩下的i个火柴,用这 ...

  8. .netCore+Vue 搭建的简捷开发框架 (5)

    文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...

  9. TCP方式的传输

    TCP 客户端 先创建socket对象建立tcp客户端,明确服务端的地址和端口,必须与服务端对应,要不然对方收不到消息,就像快递填错了送货地址. Socket s = new Socket(" ...

  10. 树莓派3B/3B+ 清华镜像系统和安装中文输入法Fcitx及Google拼音输入法

    你还在为树莓派无法安装中文输入法而到处找教程吗? 你还在为树莓派每次下载都要远隔重洋获取资源,龟速下载而烦恼吗? 为了解决这个问题,在这篇树莓派教程中,我将手把手叫你怎样安装 清华镜像系统和中文输入法 ...