1 SpringMVC知识汇总
在(2)IDEA上编写第一个SpringMVC 文章中,我们成功创建了一个SpringMVC工程
为了加深自己的理解
进一步的去探究它的流程
分为两个步骤:
-
- 启动服务器,加载一些配置文件
-
- 发送请求,后台处理请求
- 发送请求,后台处理请求
1. 启动服务器,加载一些配置文件
首先查看配置文件web.xml
1 DispatcherServlet对象创建
在web.xml中配置一个前端控制器 ,叫做servlet
servlet第一次发请求,会被创建成对象。
配置这个标签的目的是:
启动服务器的时候,servlet会直接创建成对象,同时DispatcherServlet对象被创建。
再服务器启动的过程当中,去加载指定 类路径下 springmvc.xml 配置文件
2 springmvc配置文件被加载
看到第一句话,注解扫描(开扫描就变对象)
把base-package 底下的类变成一个对象
3 helloController创建成对象
扫描到@Controller注解
把指定包底下的helloController这个类变成单例对象,加载到IOC容器当中。
bean标签,配置bean标签意味着视图解析器也会直接变成对象。
如果调用视图解析器,它能帮我们工作,跳转页面
开启SpringMVC注解的支持,@RequestMapping也可以生效
helloController对象有了,方法上也加注解了。
以后发请求,我们只要找到这个对象中的方法,然后再让这个方法去执行
2. 发送请求,后台处理请求
找到index.jsp文件
我们能看到一个超链接
我们点击这个超链接,就能发送这个请求。
发送请求之后,第一个执行servlet
/ 代表这拦截所有的请求,任何请求都会经过servlet
DispatcherServlet:前端控制器(核心:控制作用,指挥中心)
超链接里面有一个相对路径
根据注解,通过path这个值,找到对应的方法
控制台打印:Hello SpringMVC
然后返回success
当方法执行完,等于控制器和方法的活就干完了
然后控制器再找别的对象去,找到springmvc中的视图解析器对象
找到视图解析器这个对象之后,会帮助我们跳转页面。
我们调用方法之后返回success,然后视图解析器会跳转到prefix和suffix指定的页面去。
然后success.jsp页面显示数据,Servlet把这个事情做完之后。
最后Servlet把请求响应到客户端就可以了
然后客户端最后看到这个结果
再整个过程中 ,前端控制器是非常重要的。
2 SpringMVC框架基于组件方式执行流程
1 Requesst请求
首先客户端发送一个请求
到达前端控制器(控制中心)-》找到处理器映射器
2 请求查找Handler
让Controller类中的方法去执行
那么怎么让这个类中的方法去执行呢?
让HelloController中的sayHello方法执行?
那么客户端其实会发送一个请求,有一个路径假设为/hello
那么我配的@RequestMapping 也有一个/ hello
两者刚好匹配
那么我就可以知道我调用的是那个方法
3 返回一个执行链
返回的是:
前端控制器是不可能帮你执行的,只起到一个控制和中转的作用
4 请求适配器执行(任何的Controller都适配上,帮你去执行这个方法)
处理器指的是: HelloController中的sayHello()这个方法
处理器适配器指的是:它会采用一个适配器的模式
如果以后客户端发送的是别的请求, 比如/saveUse
那么我以后会写一个UserController 里面有一个save的方法
那么客户端发送任何请求,都是先去找处理器映射器。
都会返回那个具体的Controller和那个方法
那么我们以后写多了,返回的类也不一样方法也不一样
我们的目的就是想让这个方法去执行,那么我们统一的通过适配器
适配器里面可以适配任何情况
访问什么类都会经过适配器
适配器的模式理解,看下图
我们发现右边都是usb的接口,我们电脑都能识别,通过这个我们的电脑可以和任何的物理硬件去连接
这叫适配器模式
5 执行
那么我们所有的Controller都过来,适配器都可以让它适配上。
都可以让Controller去执行,任何Controller和任何类都可以转换成适配器,然后我们用适配器去执行最终的方法
6 返回ModelAndView
返回视图的页面,比如我们之前的那个success字符串
我们知道往哪里跳,比如我们跳到success.jsp页面
7 请求视图解析器(让你去跳转到XXX页面)
那么我们返回这个跳转页面之后, success.jsp
视图解析器根据你的返回的结果 跳转到xxx页面
response相应
当页面完事以后,前端控制器给响应回去给客户端
springmvc.xml配置文件中,下面的这句话
相当于默认把处理映射器和处理适配器,默认配上 是一样的效果