Javaweb项目:超市管理系统

(1)实现技术:MySQL+jsp+servlet+tomcat+maven;是一个maven项目。
(2)MVC的三个部分全部自己手敲,没怎么抽取代码,看着可能冗余,大概这就是新手吧。
(3)功能基本实现了,只是前端页面的返回是history(-1),这个在多次使用后可能会导致页面白屏,暂时不太会处理。
(4)源码下载链接:smbms源码.zip
(5)在这篇文章中,只是项目的实现思路

分篇阅读:
smbms项目(一):项目开始阶段
smbms项目(二):用户管理页面
smbms项目(三):供应商管理页面
smbms项目(四):订单管理页面
smbms项目(五):项目小总结

smbms项目(一)

项目搭建
实现登录、登出、修改密码、跳转到用户管理页面

一、项目搭建准备工作

  1. 搭建一个maven web项目


  2. 配置tomcat


  3. 测试项目是否可以运行

  • 启动一下tomcat,确定是可以跑的
  1. 导入项目中需要的jar包
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    <!--JSTL表达式依赖-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!--Standard标签库-->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

  </dependencies>
  1. 创建项目包结构


  2. 编写实体类
  • ORM映射:表——类映射
  1. 编写基础公共类
  • 数据库配置文件 properties
    此文件注意不要乱加 ;
  • 数据库公共类
  • 编写字符编码过滤器
  1. 导入静态资源

二、登录功能实现

image
    1. 编写前端页面
    1. 设置欢迎页面
    1. 编写dao层登录用户登录的接口
    1. 编写dao接口的实现类
  • 5.业务层接口
    1. 实现业务层接口
    1. 编写Servlet
    1. 配置Servlet
    1. 测试功能是否全部实现

三、登录功能优化

(一)注销功能

- 思路:移除Session,返回登录页面
  • 1.1. servlet
  • 1.2. 配置xml

(二)登录拦截优化

  • 2.1. servlet
  • 2.2. 配置xml

四、密码修改

    1. 导入前端素材
    1. 写项目,从底层往上写
  • 从dao层开始写起,再写业务层service,再写控制层servlet,再和视图层jsp作联系。要思考好一个事务和数据库的逻辑关系,分别实现不同层次的代码。
    1. UserDao接口
    1. UserDao接口实现类
    1. UserService接口
    1. UserService实现
    1. 编写Servlet
  • json工具包导入
    1. 配置xml

五、用户管理实现

  • 思路:
    image
  • 导入分页的工具类
  • 用户列表页面导入

(一)获取用户数量

  • 1.1. UserDao
  • 1.2. UserDaoImpl
  • 1.3. Service
  • 1.4. ServiceImpl

(二)获得用户列表

  • 2.1. UserDao
  • 2.2. UserDaoImpl
  • 2.3. Service
  • 2.4. ServiceImpl

(三)获得角色列表

为了职责分明清晰,可以把角色的操作单独放到一个包中,和pojo一一对应

  • 3.1. RoleDao
  • 3.2. RoleDaoImpl
  • 3.3. RoleService
  • 3.4. RoleServiceImpl
  • 3.5. Servlet
    • 3.5.1. 查询获得用户列表
    • 3.5.2. 从前端获取数据
    • 3.5.3. 获得用户的总数(分页:上一页、下一页的情况)
    • 3.5.4. 控制首页和尾页,如果页面要小于1,就显示第一页的东西
    • 3.5.5. 获取用户列表展示
    • 3.5.6. 返回前端

smbms项目(二)用户管理页面

一、根据用户id查询用户信息(用户管理的查看操作)

    1. UserDao
    1. UserDaoImpl
    1. UserService
    1. UserServiceImpl
    1. Servlet
    1. xml

二、根据用户id修改用户信息(用户管理的修改操作)

(一)修改页面的跳转

  • 1.1. servlet
  • 1.2. xml

(二)得到角色列表

  • 2.1. servlet
  • 2.2. xml

(三)提交更改用户信息,表单提交

  • 3.1. UserDao
  • 3.2. UserDaoImpl
  • 3.3. UserService
  • 3.4. UserServiceImpl
  • 3.5. Servlet
  • 3.6. xml

三、添加用户

(一)获得用户全部角色

和上面所用的方法一样

(二)获得全部用户的userCode并判断用户想要新建用户的userCode是否能使用

  • 2.1. UserDao
  • 2.2. UserDaoImpl
  • 2.3. UserService
  • 2.4. UserServiceImpl
  • 2.5. UserServlet
  • 2.6. xml

(三)提交新用户信息,存储在数据库

  • 3.1. UserDao
  • 3.2. UserDaoImpl
  • 3.3. UserService
  • 3.4. UserServiceImpl
  • 3.5. UserServlet
    • 问题分析:因为前端提交表单有属性:enctype="multipart/form-data"
    • enctype="multipart/form-data"时文本框参数获取问题的解决
      - 使用文件的方式读取资源,新增一个AddUserServlet的类,处理该特殊请求
      - 前端页面,跳转到添加用户的是通过超链接实现,所以放到doGet方法中,表单提交(post)处理就使用post方法
      - 路径问题:this.getServletContext().getRealPath("/")获得null,查找一番没解决,便写死了项目在硬盘上的地址(没有解决的bug)

  • 3.6. xml
  • 3.7. bug:文件的路径获取失败:
    • request.getSession().getServletContext().getRealPath("/statics/images");
    • this.getServletContext().getRealPath("/") + "/statics/tmp";

四、删除用户

  • 4.1. UserDao
  • 4.2. UserDaoImpl
  • 4.3. UserService
  • 4.4. UserServiceImpl
  • 4.5. UserServlet
  • 4.6. xml

smbms项目(三)供应商管理页面

  • 页面跳转
  • ProviderServlet
  • web.xml

(一)、供应商管理页面

1、根据供应商编码或者供应商名称查询供应商总数

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl

2、通过条件查询获得供应商列表

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl
  • ProviderServlet

(二)、供应商查看页面

根据供应商id查询供应商信息,供应商管理页面 下的 查看请求

  • ProviderDao--> ProviderDaoImpl--> ProviderService--> ProviderServiceImpl--> ProviderServlet--> web.xml

(三)、供应商修改页面

1. 页面跳转

根据供应商id 获取供应商信息,并返回前端,这和查看供应商信息的功能一样,只是跳转的页面不一样,只要修改Servlet就行

  • ProviderServlet

2. 修改供应商信息

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl
  • ProviderServlet
  • web.xml

(四)、供应商添加页面

1. 添加页面跳转

  • 1.1 ProviderServlet
  • 1.2 web.xml

2. 查询供货商编码

查询全部的供货商编码(dao)
确定供货商编码是否未被使用、给前端设置数据(Servlet)

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl
  • ProviderServlet
  • web.xml

3. 添加用户

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl
  • ProviderServlet
  • web.xml

(五)、删除供应商

  • ProviderDao
  • ProviderDaoImpl
  • ProviderService
  • ProviderServiceImpl
  • ProviderServlet
  • web.xml

至此完成了供应商管理页面的全部功能

smbms项目(四)订单管理页面

  • 页面跳转
  • BillServlet
  • web.xml

(一)、订单管理页面

1、全部供应商列表

  • BillServlet

2、根据商品名称、供应商id、是否付款的标识查询获得订单总数

  • BillDao
  • BillDaoImpl
  • BillService
  • BillServiceImpl

3、根据商品名称、供应商id、是否付款的标识查询获得供应商列表

关于get方式提交中文乱码问题的解决方式

  • BillDao
  • BillDaoImpl
  • BillService
  • BillServiceImpl
  • BillServlet

(二)、订单信息查看页面

不得不记录一个人为bug:<servlet-name>ProviderServlet</servlet-name>,一开始将下面的配置语句写成了上面那句,所以请求处理一直没有正确的处理,即是拿到了前端数据,但是没有交由正确的程序处理,是不行的!

  • web.xml
  • BillDao
  • BillDaoImpl
  • BillService
  • BillServiceImpl
  • BillServlet

(三)、订单信息修改页面

1. 页面跳转

根据订单id 获取订单信息,并返回前端,这和查看订单信息的功能一样,只是跳转的页面不一样,只要修改Servlet就行

  • BillServlet

2. 获得供货商编码列表,返回前端json数组

订单信息修改页面下的 获得供应商 列表 异步请求,无页面跳转

  • BillServlet

3. 订单信息修改页面下的 修改保存提交请求

  • java中的BigDecimal和String的相互转换

  • BillDao

  • BillDaoImpl

  • BillService

  • BillServiceImpl

  • BillServlet

  • web.xml

(四)、订单信息添加页面

1. 跳转到添加订单信息页面

  • BillServlet
  • web.xml

2. 获得供货商编码列表,返回前端json数组

订单信息添加页面下的 获得供应商 列表 异步请求,无页面跳转,这里和上面的一样

3. 订单信息提交,并保存到数据库

  • BillDao
  • BillDaoImpl
  • BillService
  • BillServiceImpl
  • BillServlet
  • web.xml

(五)、删除订单信息

  • BillDao
  • BillDaoImpl
  • BillService
  • BillServiceImpl
  • BillServle
  • web.xml

至此完成了订单管理页面的全部功能,以下是BillServlet的doGet方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,277评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,487评论 3 400
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,114评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,367评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,352评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,919评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,328评论 3 426
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,278评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,808评论 1 321
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,882评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,005评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,672评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,344评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,839评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,959评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,481评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,031评论 2 361

推荐阅读更多精彩内容