1、三层架构:软件设计架构
软件设计的三层架构如下(参考视频20解析):注意三层架构与MVC开发模式的关系。
1. 界面层(表示层):用户看到的界面。用户可以通过界面上的组件和服务器进行交互
2. 业务逻辑层:处理业务逻辑的。
3. 数据访问层:操作数据存储文件(数据库、xml、properties等)。
1. M:Model,模型。JavaBean
* 完成具体的业务操作,如:查询数据库,封装对象
2. V:View,视图。JSP
* 展示数据。
3. C:Controller,控制器。Servlet(控制器就是一个中转)
* 获取用户的输入;
* 调用模型,使用模型封装的业务进行数据的查询与获取;
* 将模型查询出来的数据交给视图进行展示。
如下图,我们之前说的MVC的控制器(Servlet)以及视图(JSP)都在界面层。用户通过浏览器访问界面层,然后通过界面层向控制器(Servlet)发送请求,控制器(Servlet)接收用户的请求,并且获取用户提交的参数信息,将参数信息封装,接下来去调用业务逻辑层(service),业务逻辑层再去调用数据访问层(DAO),数据访问层查询数据库并将相应的数据返回给业务逻辑层,业务逻辑层再将数据返回给MVC的控制器(Servlet),控制器(Servlet)将数据发送给视图(JSP),用于展示数据,由这个JSP页面最终给客户端作出响应。
我们以前写代码的时候没有业务逻辑层,以前MVC模型中的model(JavaBean)就是在数据访问层,我们以前直接通过界面层的控制器(Servlet)直接调用数据访问层的模型中的业务逻辑(比如之前案例中的UserDao中的login()方法,我们直接使用Servlet调用login方法进行登录,login()方法会查询数据库有没有我们输入的参数并验证)。也就是说我们之前是没有编写中间的业务逻辑层的。
那为什么要定义业务逻辑层,这样反而更加复杂?我们在数据访问层中定义了对数据库最基本的CRUD操作,也就是说这些功能是十分单一的,但是这些单一功能的方法是无法完成一件具体的事情。业务逻辑层中将DAO中的简单方法组合成为复杂的功能(业务逻辑的操作),这样使得数据访问层的方法的复用性大大增强,我们的业务逻辑层要使用到哪一些功能,就将数据访问层中的功能取出来使用即可。我们在业务逻辑层(service)中会编写大量的代码来处理这些复杂的业务操作。而界面层(web)的功能是接收用户参数,封装数据,调用业务逻辑层完成数据的处理,最后将处理的数据转发给JSP页面,并将JSP页面返回给浏览器显示。
以后放置各部分代码的包起名:界面层(公司域名.项目名.web)、业务逻辑层(公司域名.项目名.service)、数据访问层(公司域名.项目名.dao)。以后项目也会这样分类代码,我们写代码的时候也需要按照规范来写代码。
我们将来会使用SSM三大框架对三层进行封装和简化,界面层(SpringMVC)、业务逻辑层(Spring)、数据访问层(MyBatis)

案例:用户信息列表展示
(这个案例结合自己文章看——Request案例:用户登录)
- 1、需求:用户信息的增删改查操作
- 2、设计
1. 技术选型:tomcat(服务器)+Servlet(控制器)+JSP(视图)+MySQL(数据库)+JDBCTemplate(JDBCTemplate对象简化JDBC的开发)+Duird(数据库连接池)+BeanUtilS(简化JavaBean的数据封装)
2. 数据库设计:
create database day17; -- 创建数据库
use day17; -- 使用数据库
create table user( -- 创建表
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50)
);
- 3、开发
1. 环境搭建
1) 创建数据库环境
2) 创建项目,导入需要的jar包
2. 编码
- 4、 测试
- 5、 部署运维
具体步骤
准备
资料里面已经提供了各种页面的html文件,包括index.html(查询所有用户信息),提供index.html可以跳转到list.html(展示用户信息),在list.html可以对用户信息进行修改,跳转到update.html,可以添加用户信息,跳转到add.html。另外还有login.html的登录页面。其他文件就是对这些页面进行美化的js、css以及fonts文件。

step1:进行项目设计,这个项目主要是技术选型以及数据库的设计
确定当前需要的技术:tomcat(服务器)+Servlet(控制器)+JSP(视图,需要使用到EL表达式以及JSTL标签替代java代码)+MySQL(数据库)+JDBCTemplate(JDBCTemplate对象简化JDBC的开发)+Duird(数据库连接池)+BeanUtilS(简化JavaBean的数据封装)
设计数据库day09case(相关数据库在:MySQL数据目录:datadir=“C:\ProgramData\MySQL\MySQL Server 5.5\data” 下查看),注意,这里只是数据库的设计,并没有真正将数据库放在SQL的环境下运行。代码如下:
CREATE DATABASE day09case; -- 创建数据库day09case
SHOW DATABASES; -- 查看所有的数据库
USE day09case; -- 使用数据库,进入我们创建的数据库
SELECT DATABASE(); -- 确认当前正在使用的数据库
-- 在数据库中创建user表
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT, -- id设置为主键,自动增长
NAME VARCHAR(20) NOT NULL, -- 姓名非空,字符类型
gender VARCHAR(5) NOT NULL, -- 性别非空,字符类型
age INT ,
address VARCHAR(32),
qq VARCHAR(20), -- qq设置为字符类型,否则数字太大可能超过int(32)位的范围,int最大也就是4294967296,qq号码很容易比这个大
email VARCHAR(50) -- email包括各种字符串,我们也使用字符串类型
);
step2:搭建开发环境
首先,创建数据库环境。打开SQLyog软件,将之前设计的sql语句放到这个软件里面运行。可以在SQLyog里面右键打开表,查看当前表的内容,当前表没有任何数据。我们可以插入一些数据。

接下来,创建项目day09Case,将虚拟目录改为:/day09case,并将端口改为80,并根据之前的技术选型导入相应的jar包(放到web——WEB-INF——lib下),记得add as library。
数据库驱动jar包: mysql-connector-java-5.1.37-bin.jar
Druid jar包: druid-1.0.9.jar
c3p0(方便我们切换连接池) :c3p0-0.9.1.2.jar
JDBC Template jar包
commons-logging-1.2.jar、spring-beans-5.0.0.RELEASE.jar、spring-core-5.0.0.RELEASE.jar、spring-jdbc-5.0.0.RELEASE.jar、spring-tx-5.0.0.RELEASE.jar
JSTL标签:javax.servlet.jsp.jstl.jar、jstl-impl.jar
BeanUtils:commons-beanutils-1.8.0.jar、commons-logging-1.1.1.jar(这个是BeanUtils的依赖包)
随后,我们将资料提供的静态页面全部复制到web目录下(静态资源全部放到web目录),将来前端人员会将各类UI、UE效果图(流程跳转图),并将对应的静态页面编写好。我们拿到静态页面后,可以根据自己的需求,改造成为自己需要的文件(比如这里改造为jsp),然后将静态页面里面的假数据换成真实的动态的数据即可(通过Servlet控制器调用业务逻辑层获取数据,并将数据返回视图JSP替换假数据),页面是不需要我们编写的。
随后我们先不要编写代码,先启动服务器,看看静态页面之间的跳转能不能完成。访问:http://localhost/day09case/index.html,正常跳转,接下来我们就可以进行代码的编写。
step3:编码分析
案例有5个功能:列表查询展示、修改,删除、添加、登录。今天只做列表查询的功能。
分析参考视频23。
首先,在界面层,我们在浏览器访问index.jsp页面,点击“查询所有用户信息”按钮,跳转到list.jsp页面,这个页面展示所有用户的信息。目前静态页面里面的数据是假的,现在我们要将这些数据转变成为真是的数据库里面存储的数据。那么我们就不能跳转直接展示的页面list.jsp,而是跳转到一个Servlet(控制器):UserListServlet.java,通过这个Servlet去查询数据库,返回数据并将这些数据动态地展示回list.jsp。(我们后期会将html页面全部改为jsp)
这个UserListServlet.java不会从index.jsp接收数据,因此我们不需要设置request的编码。下面的步骤如下:
- 我们在UserListServlet.java里面调用service层的findAll()方法,返回List集合List,这个集合里面包含了查询出来的数据库里面的User对象。我们在这里调用service层的findAll方法的时候,会UserService service = new UserServiceImpl();
- 我们将获取到的List集合传入request域中,以便于将index.jsp的请求跳转到展示页面list.jsp;
- 将request域中的数据转发到list.jsp页面进行展示
list.jsp接收到UserListServlet后,会使用el+jstl将数据展示到页面上。使用jstl的foreach标签遍历List集合,生成表格table展示数据。
在service层,我们会创建一个UserService.java接口以及该接口的实现类UserServiceImpl.java。这样设置的好处是,在界面层UserListServlet.java创建实现类的对象,如果我们实现类的功能有缺陷,我们只需要替换实现类就可以,不需要改变接口的功能,提高了程序的可扩展性与可维护性,这是面向接口的编程方式。在接口UserService.java里面有:public List findAll()方法,在实现类UserServiceImpl.java里面也会有:public List findAll()方法,这个方法调用dao.fianAll()完成查询,并将查询出来的数据返回给Servlet(UserListServlet)
在DAO层,我们也会创建接口UserDao.java以及实现类UserDaoImpl.java。在接口UserDao里面,有:public List findAll()方法,实现类UserDaoImpl.java里面也会有:public List findAll()方法,这个方法使用jdbc操作数据库。
用户访问index.jsp。跳转到UserListServlet.java,这个类调用UserServiceImpl.java的findAll()查询数据库,返回用户信息的List集合,同时UserServiceImpl.java也会调用UserDaoImpl.java的方法查询数据库。然后UserListServlet.java将list集合插入request域,并转发到list.jsp页面,这个页面遍历list集合并展示数据,这样用户在浏览器上就看到了list.jsp页面展示的数据。

step4:代码编写
我们先创建各类包:domain(数据库表对应的实现类)、web(界面层)、service(业务逻辑层)、dao(数据访问层)、util(工具类)。
首先,编写domain下的类User.java,这个类对应数据库的user表。代码如下
package lkj.domain;
public class User
{
private int id;
private String name;
private String gender;
private int age;
private String address;
private String qq;
private String email;
//空构造器
public User()
{
}
//带参构造器
public User(int id, String name, String gender, int age, String address, String qq, String email)
{
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
this.address = address;
this.qq = qq;
this.email = email;
}
//getter与setter方法
public int

本文介绍了采用三层架构的JavaWeb项目,详细讲解了一个使用EL和JSTL进行用户信息列表展示的案例。首先解释了三层架构的组成及其优势,接着阐述了案例的需求和设计,包括技术选型(如Tomcat、Servlet、JSP、MySQL等)。文章详细描述了从项目设计、环境搭建到编码实现的步骤,特别强调了在Service层和DAO层的接口与实现类的使用,以及如何利用EL和JSTL在JSP页面上动态展示数据。
part2——三层架构、ELJSTL用户信息列表展示案例&spm=1001.2101.3001.5002&articleId=104375167&d=1&t=3&u=a5eec9ec23e64e7991e25cb9afa14e93)
7887

被折叠的 条评论
为什么被折叠?



