一:三层架构和MVC
1、三层架构:
表现层: 也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。 表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)
业务层: 也就是我们常说的service层。它负责业务逻辑处理。web层依赖业务层,但是业务层不依赖web层。 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)
持久层: 也就是我们是常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。
SpringMVC在三层架构的位置
2、MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)这三大部分的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC中每个部分各司其职:
Model:数据模型,JavaBean的类,用来进行数据封装。
View:指JSP、HTML用来展示数据给用户。
Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。
3、SpringMVC概述
- 是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。
- Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供
了构建 Web 应用程序的全功能 MVC 模块。 - 使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的
SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。二:SpringMVC的入门案例
SpringMVC是基于Spring在web层开发,所以需要创建web-app工程。1、DispatcherServlet
DispatcherServlet:前端控制器,也是整个SpringMVC的核心控制器,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
配置核心控制器 -一个Servlet
<!-- 配置前端控制器--> |
2、创建SpringMVC配置文件
SpringMVC是基于Spring开发,所以在配置文件中,仍然与Spring一致,并且加入xmlns:mvc,同时使用注解开发方便,还需加入xmlns:context
xmlns:mvc="http://www.springframework.org/schema/mvc" |
同时与Spring一样要 开启注解的支持<mvc:annotation-driven 和 注解要扫描的包<context:component-scan
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。
使用mvc:annotation-driven自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在SpringMVC.xml配置文件中使用mvc:annotation-driven替代注解处理器和适配器的配置。
<!-- 开启springmvc框架注解的支持--> |
同时在核心控制器 DispatcherServlet 中加入 在应用加载时加载SpringMVC的配置文件contextConfigLocation
<!-- 配置前端控制器--> |
3、配置视图解析器InternalResourceViewResolver
View Resolver负责将处理结果生成View视图(jsp),View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
<!-- 试图的解析器--> |
4、创建控制器并使用注解配置
@Controller表示这是个控制器
@RequestMapping注解作用: 用于建立请求URL和处理请求方法之间的对应关系。
例如在类中加入/user,在方法中加入/hello,则当url为项目名称/user/hello时就加载控制器
/** |
5、RequestMapping注解
属性:
value / path:用于指定请求的URL。它和path属性的作用是一样的。
method:用于指定请求的方式。例如 method=RequestMethod.POST。就只能以post请求
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样。
例如: params = {“accountName”},表示请求参数必须有accountName
headers:用于指定限制请求消息头的条件。
6、入门案例的执行过程及原理分析
1、案例执行过程
1、服务器启动,应用被加载。读取到web.xml中的配置创建spring容器并且初始化容器中的对象。
<web-app> |
2、浏览器发送请求,被DispatherServlet捕获,该Servlet并不处理请求,而是把请求转发出去。转发的路径是根据请求URL,匹配@RequestMapping中的内容。
/** |
3、匹配到了后,执行对应方法。该方法有一个返回值(例如:success)。
4、根据方法的返回值,借助InternalResourceViewResolver(试图解析器)找到对应的结果视图。
5、渲染结果视图,响应浏览器。