(Subms)超市订单管理系统
- 运用技术java、Servlet、(JSP、js、jquery、css)不做介绍、Tomcat服务器
主要锻炼的就是如何更深层次的理解MVC三层架构 ,我们的这个超市订单管理系统实际上就一个增删改查的一个项目。主要说说一些里面的业务逻辑跟架构思想
简单说说MVC三层架构
首先来说,三层架构与MVC的目标一致:都是为了解耦和、提高代码复用。MVC是一种设计模式,而三层架构是一种软件架构。
三层架构分为:表现层(UIl)(web层)、业务逻辑层(BLL)(service层)、数据访问层(DAL)(dao层) ,再加上实体类库(Model)
1.实体类库(Model),在Java中,往往将其称为Entity实体类。数据库中用于存放数据,而我们通常选择会用一个专门的类来抽象出数据表的结构,类的属性就一对一的对应这表的属性。
·一般来说,Model实体类库层需要被DAL层,BIL层和UI层引用。
2.数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作 。DAL就是根据业务需求,构造SQL语句,构造参数,调用帮助类,获取结果,DAL层被BIL层调用
3.业务逻辑层(BLL) BLL层好比是桥梁,将UI表示层与DAL数据访问层之间联系起来。所要负责的,就是处理涉及业务逻辑相关的问题,比如在调用访问数据库之前,先处理数据、判断数据。
各层引用关系如下图
mvc与三层架构对应的关系如下图
接下来我会围绕着三层架构来简述这个项目
项目搭建
- 搭建一个Maven web项目
- 配置Tomcat
- 测试项目是否运行起来
- 导入项目中会遇到的jar包;
.。jsp,servlet,mysql驱动,jstl,stand,,,(依赖)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--standard-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.36</version>
</dependency>
<!-- jstl标签注解依赖-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- servlet 依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<!-- jsp依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!-- mysql依赖 我的数据库版本是8.0.23版本不同的去官网换新的-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
- 创建项目包结构
- 编写实体类 上面介绍了链表映射就是把数据库中的字段封装成一个个属性 给每个字段加上get,set重点
- 编写基础公共类,在resources下创建一个db.properties
这个文件是数据库配置文件,其中配置如下
#数据源
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?ServerTimezone=UTC
username=root
password=123456
1.编写Dao操作数据空公共类
公共类结束
- 防止页面会出现乱码我们用过滤器来实现过滤乱码的操作
-
别忘了注册这个过滤器
2.登入功能(验证密码、注销、过滤器优化)
我先把 user用户 的操作数据库层 跟业务层 的接口 跟接口实现类的名字先列出来(接口中一个方法对应实现类一个方法可以更好进行排查优化)
- UserDao(Dao层接口)
- UserDaoImpl(Dao层接口实现类)
- UserService(业务层接口)
- UserService(业务层接口实现类)
验证账号
UserDao
UserDaoImpl
Userservice
UserserviceImpl
servlet层跟前端交互的层
注销功能
注销功能是一个jsp页面中的a标签中 标签后面放了一个执行servlet的地址,我就只把servlet代码逻辑列出。
过滤器优化
优化了 我们不登入的话是没办法访问主页面的。因为我们必须登入才能访问主页面啊。如果有人复制主页面的网址,不登入直接访问那不就炸了。
3.修改密码
修改密码的页面
UserDao
UserDaoImpl
Userservice
UserserviceImpl
servlet层
总结
1.其实到这就行了,往后的功能再说也没意义,我们只要加深架构思想就行了,这个里面用的各个层之间确实是很绕,公共类中写了执行sql的方法 查询方法没创建Preparement跟Result,所以我们要在Dao层创建。 增删改方法没写Preparement方法也需要自己创建。
2.还有我们Dao层中的方法体中都加了(Conection conection),但是在Dao层中确没有实现,只是在Dao层判断了是否存在如果存在才往下走
3.以我的理解来看这个项目中service业务层中只写了connection=公共类中连接数据的方法,然后再调用一遍Dao层然后把connection跟其他属性在传进取而已,实现一个分离的过程。
4.我写这个项目的时候 是因为粗心问题造了很多的bug的,其中最需要注意的就是,实现登入校验的时候,Dao层中创建了一个实现类中smbms_user中的对象,因为里面封装了getset方法,所以这边是把查询的所有属性放在这个对象中然后返回。重点是我们这边是在Servlet层中把这个对象放在了setAttribute中,可以很方便的使我们在没个servlet中随意的取拿里面的参数(getArrribute)。
5.这个写出来的意义只是想让我们更加的了解MVC三层架构思想,所以我在叙述里面的代码的时候没有带上前端的jsp来详细的说,我列个图来简单说一下这个项目的架构