(1)实现技术:MySQL+jsp+servlet+tomcat+maven;是一个maven项目。
(2)MVC的三个部分全部自己手敲,没怎么抽取代码,看着可能冗余,大概这就是新手吧。
(3)功能基本实现了,只是前端页面的返回是history(-1),这个在多次使用后可能会导致页面白屏,暂时不太会处理。
(4)源码下载链接:smbms源码.zip
(5)在这篇文章中,只是项目的实现思路
分篇阅读: |
---|
smbms项目(一):项目开始阶段 |
smbms项目(二):用户管理页面 |
smbms项目(三):供应商管理页面 |
smbms项目(四):订单管理页面 |
smbms项目(五):项目小总结 |
smbms项目(一)
项目搭建
实现登录、登出、修改密码、跳转到用户管理页面
一、项目搭建准备工作
-
搭建一个maven web项目
-
配置tomcat
测试项目是否可以运行
- 启动一下tomcat,确定是可以跑的
- 导入项目中需要的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>
-
创建项目包结构
- 编写实体类
- ORM映射:表——类映射
- 编写基础公共类
- 数据库配置文件 properties
此文件注意不要乱加 ; - 数据库公共类
- 编写字符编码过滤器
- 导入静态资源
二、登录功能实现
- 编写前端页面
- 设置欢迎页面
- 编写dao层登录用户登录的接口
- 编写dao接口的实现类
- 5.业务层接口
- 实现业务层接口
- 编写Servlet
- 配置Servlet
- 测试功能是否全部实现
三、登录功能优化
(一)注销功能
- 思路:移除Session,返回登录页面
- 1.1. servlet
- 1.2. 配置xml
(二)登录拦截优化
- 2.1. servlet
- 2.2. 配置xml
四、密码修改
- 导入前端素材
- 写项目,从底层往上写
- 从dao层开始写起,再写业务层service,再写控制层servlet,再和视图层jsp作联系。要思考好一个事务和数据库的逻辑关系,分别实现不同层次的代码。
- UserDao接口
- UserDao接口实现类
- UserService接口
- UserService实现
- 编写Servlet
- json工具包导入
- 配置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查询用户信息(用户管理的查看操作)
- UserDao
- UserDaoImpl
- UserService
- UserServiceImpl
- Servlet
- 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、是否付款的标识查询获得供应商列表
- 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方法