目录
SpringMVC
一、概念
二、springMVC的请求处理流程
三、mvc:annotation-driven 标签的作用
四、HandlerMapping、Handler和HandlerAdapter的介绍
五、SpringMVC 体系结构
六、SpringMVC的常用注解
七、view和controller之间的传值
SpringMVC
一、概念
1、
SpringMVC
是
spring
提供的一种基于
MVC
架构模式的轻量级
web
开发框架,其本质相当于
Servlet
2、mvc介绍:
model、
view
、
controller
的缩写,是一种软件设计规范
是将业务逻辑、数据、显示分离的方法来组织代码
MVC主要作用降低视图与业务之间数据的双向耦合
MVC不是一种设计模式,
MVC
是一种架构模式,当然不同的
MVC
存在差异。
3、为什么要学习springMVC?
轻量级、简单易学
约定优于配置 --------- springboot
约定优于配置
高效!基于请求响应的mvc
框架。
4、Servlet 和
SpringMVC
的区别
SpringMVC其实就是
Servlet
,只不过对
Servlet
进行的封装
(1)
Servlet
一个请求
URL
映射为一个类
(2)
SpringMVC
一个请求
URL
映射为一个方法。
二、springMVC的请求处理流程
1、用户发送请求到
springMVC
的前端控制器(
DispatcherServlet
)
2、前端控制器会将我们的请求,委托给我们的处理器(
HanlderMapping
)
,
根据请求的路径,来映射哪一个方法来执行。(@RequestMapping("/")
)
3、会执行到我们写的处理器,控制器(
Handler,Controller
)
4、然后调用对应的
model
或者直接返回对应的结果(逻辑视图名)
三、mvc:annotation-driven 标签的作用
1、这个注解会帮助我们自动注册两个
bean
HandlerMapping :映射(请求地址,映射到具体的方法上面)
HandlerAdapter :适配器()
2、@Controller
当配置该文件之后,spring
就知道我们使用注解的方式,来完成
springmvc
的创建,他就会扫描带有
controller
的注解。
HadlerMappering实现类的主要作用,就是将请求映射到带有
RequestMapping
注解的控制器(
controller
)方法中,将URL
路径映射到控制器的
bean
。
HandlerAdapter实现类的主要作用,实现类
RequestMappingHandlerAdapter
,处理请求的适配器,确定调用哪个类的哪个方法,构造方法,参数,返回值。
四、HandlerMapping、Handler和HandlerAdapter的介绍
1、Handler
(对应的方法,
@RequestMappering
)
Handler,也就是处理器,它直接对应着
MVC
中的
C
层,即
Controller
层,它可以表现为多种形式,可以是类,也可以是方法或者是其他的形式,它的类型是Object
。我们用的最多的就是用
@RequestMapping
注解标注的方法,它就对应着一个Handler
2、HandlerMapping
HandlerMapping,是用来查找
Handler
的,在
spingmvc
中会处理很多请求,每一个请求都需要一个
Handler
进行处理,具体接受到一个请求后使用哪个Handler
来处理,就是
HandlerMapping
需要做的事情
3、HandlerAdapter
HandlerAdapter,即
Handler
的适配器,也是这
3
个概念中理解起来比较模糊的一个概念。上面说
Handler
的时候,我们说Handler
是有多种的表现形式,只要能处理请求就可以,而
dispatchServlet
处理请求的方式却是固定的
——doService(request,response),那么怎么让固定的
doService
调用灵活的
Handler
来进行处理呢,这就是HandlerAdapter需要做的事情。
适配器模式, 有很多种控制器(Controller)
一种是带
@Controller
注解的, 还可以写一个
servlet
当做
controller,
所以用适配器做适配,你看看HandlerAdapter
有几个子类,每个子类都是适配某一种类型的控制器,有了HandlerAdapter,你只需要调用
handle
方法,屏蔽了不一致的细节,否则在
DispatcherServlet
里面要
if else if else了。
五、SpringMVC 体系结构
六、SpringMVC的常用注解
1、
@Controller
注解
标识在类上面,表示当前这个类,可以用于处理我们的用户请求。
2、
@RequestMapping
注解
可以标识在类上面、也可以标识在方法上面,他的主要作用就是配置我们的请求路径和方法之间的关系。标识在类上面的作用,主要用于模块之间的区分。
七、view和controller之间的传值
1、
view
传值给
controller
@RequestParam
如果参数的前面添加这个注解,默认当前参数就是必填项,你请求该方法上面url
的时候,必须要携带当前参数,如果不携带该参数,就会显示400
错误,因为
requestParam
的注解的默认值是
true。
总的来说,有三种方式:简单数据类型(参数少的时候,直接入参) 、对象(参数多的时候,对象入参) 、json格式
2、controller传值给view
(1)通过
modelAndView
来传值
(2)Model
来传参数
(3)Map集合的方式,需要用到
jstl
和
el
表达式
一个类中,我们需要做到的就是 @RequestParam("")
路径全局唯一: 类上面+
方法上面
+get/post
请求,三个加起来唯一就行。因此你会看到在一个类中存在相同的请求路径,但是请求方式是不一样的。
如果jsp
页面中通过
el
表达式无法获取值的时候,可以在
jsp
页面添加如下代码解决:
<%@ page isELIgnored="false" %>