SpringMvc工作流程

本文深入探讨SpringMVC的工作原理,从DispatcherServlet的角色到HandlerMapping、HandlerAdapter的实现细节,再到视图解析过程,全面解析SpringMVC的运行机制。

springmvc核心是由DispatcherServlet控制调度请求地址、HandlerMapping和HandlerAdapter 达成一整套处理流程
MVC是一种架构模式 --- 程序分层,分工合作,既相互独立,又协同工作

SpringMVC的原理

1、客户端请求在web.xml中配置好DispatcherServlet,并且接受一切HTTP请求(如*.do)
2、当用户的请求被截获时,根据请求的URL生成一个处理对象,交给DispatcherServlet
4、DispatcherServlet通过HandlerMapping的配置定位到特定的Controller(@Controller初始化默认配置 Handler)
5、然后通过HandlerAdapter调用Handler中对应的业务处理方法(传过来的Handler与注册好的HandlerAdapter进行匹配)(方法级的拦截)
6、业务处理方法返回一个逻辑视图名(View)和模型数据(ModelAndView),交给 DispatcherServlet
7、DispatcherServlet调用ViewResolver解析出真实的视图对象,得到这个视图对象后,DispatcherServlet就使用Model对其进行渲染,将最后结果返回给用户

DispatcherServlet有一个初始化方法initStrategies,它在WebApplicationContext初始化后执行,此时所有的组件Bean均已可用(方法通过反射机制查找并装配Spring容器中)
Spring MVC也是基于Servlet
@Controller注解很重要,Spring会在启动的时候扫描它,将其划入到Handler中去

spring3.0.4以后版本提供了对静态资源文件的访问
<mvc:resourcesmappingmvc:resourcesmapping="/images/**" location="/images/" />

HandlerMapping接口的实现:
BeanNameUrlHandlerMapping :通过对比url和bean的name找到对应的对象
SimpleUrlHandlerMapping :也是直接配置url和对应bean,比BeanNameUrlHandlerMapping功能更多
DefaultAnnotationHandlerMapping : 主要是针对注解配置@RequestMapping的,已过时
RequestMappingHandlerMapping :取代了上面一个

HandlerAdapter 接口实现:
HttpRequestHandlerAdapter : 要求handler实现HttpRequestHandler接口,该接口的方法为void handleRequest(HttpServletRequest,HttpServletResponse)也就是 handler必须有一个handleRequest方法 
SimpleControllerHandlerAdapter:要求handler实现Controller接口,该接口的方法为ModelAndView handleRequest(HttpServletRequest, HttpServletResponse)       
AnnotationMethodHandlerAdapter :和上面的DefaultAnnotationHandlerMapping配对使用的,也已过时
RequestMappingHandlerAdapter : 和上面的RequestMappingHandlerMapping配对使用,针对@RequestMapping

主要工作有以下三项:
1)截获符合特定格式的URL请求。
2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

 

转载于:https://www.cnblogs.com/webster1/p/8525009.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值