应用系统三层架构:
-
C/S架构:客户端/服务器架构
-
B/S架构:浏览器/服务器架构
Java开发的大多是web应用,是基于B/S架构开发的。JavaEE指定了一套规范,去进行BS结构的处理,这套规范就是Servlet。
B/S架构中,应用系统标准的三层架构为: 表现层、业务层、持久层。
表现层(Web层)
- 负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求 web,web层需要接收 http请求,完成http响应。
- 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
- 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
- 表现层的设计一般都使用 MVC 模型。 MVC 是表现层的设计模型,和其他层没有关系。
业务层 (Service层)
- 它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖Web层。
- 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。 (事务应该放到业务层来控制)
持久层 (dao 层)
- 负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口;业务层需要通过数据访问层将数据持久化到数据库中。
- 持久层就是和麵库交互,对麵库表进行曽删改査的。
MVC 设计模式
MVC是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计编写Web应用程序表现层的
模式。
MVC设计模式的三大角色:
Model (模型)
模型包含业务模型和数据模型,数据模型用于封装数据,业务模型用于处理业务。
View (视图)
通常指的就是我们的jsp或者html。作用一般就是展示数据的。
通常视图是依据数据模型创建的。
Controller (控制器)
是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。
Spring MVC
Spring MVC是一种基于MVC设计模型的请求驱动类型的轻置级Web框架,属于Spring FrameWork的后续产品,已经融合在Spring Web Flow里面Spring 框架提供了构建Web应用程序的全功能MVC模块。
Spring MVC 与 Spring
Spring MVC 全称为Spring Web MVC,它是Spring家族中Web模块的一个重要成员。
SpringMVC六大组件
MVC组件:前端控制器、处理器、视图
三大组件:处理器映射器、处理器适配器、视图解析器
需要开发的组件:处理器、视图(前后端分离后,后端不需要开发)
DispatcherServlet : 前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的C , dispatcherservlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherservlet的存在降低了组件之间的耦合性。
Handler : 处理器
Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
View : 视图
Spring MVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是jsp。
通过页面标签或页面模版技术将模过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler处理器,spring MVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
HandlerAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
web应用的访问流程
Spring MVC底层是通过servlet实现的。
Servlet实例由Servlet容器(tomcat、jboss、jetty)产生。
Servlet实例什么时候产生?
一种是第一次访问一个请求的时候,产生对应的Servlet对象,只会产生一次。
另一种需要针对Servlet标签特殊配置
[Servlet] (https://www.cnblogs.com/kuotian/p/13141784.html)
客户端访问请求:http://xxx:8080/kkb/hello
域名/ip:确定哪台服务器 --- xxx:8080
应用名称:确定哪个应用 --- kkb
请求字符串:需要根据web.xml中的配置找到相应的类去处理 --- hello