前一章节对springMVC初步讲解了,我们得知它由C-Dispatcher;M-HanlderMapping、HandlerAdapter、Handler;V-ViewResolver三部分组成;其中我们加入了一个spring的字符集拦截器CharacterEncodingFilter在我们的Web.xml里面,构成为SpringMVC。我们只有记住spring的这几个大结构,即使其中的某个部分换了组件,依然能够知道怎么去配置,例如struts2的整合。接下来首先讲一下映射器HandlerMapping与HandlerAdapter。
匹配Spring容器Bean的Name找到的Bean(程序员编写Hanlder)
2.1.2 SimpleUrlHandlerMapping
BeanNameHandlerMapping的升级版,因为它可以统一配置Controller里面对应Url
注意:benaname与simple两者同时配置,那么两者同时有效。
要求程序编写的Handler(Controller)需要实现 Controller接口。
要求Handler 实现 HttpRequestHandler接口
提醒:我用的时候需要加全路径
spring3.1版本之前加载映射器org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
spring3.1之后用org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping
也是源码解读:/org/springframework/spring-webmvc/4.2.0.RELEASE/spring-webmvc-4.2.0.RELEASE.jar!/org/springframework/web/servlet/DispatcherServlet.properties里面清楚记载了先加载谁
在springmvc.xml中配置RequestMappingHandlerMapping:
使用RequestMappingHandlerMapping需要在Handler 中使用@controller标识此类是一个控制器,使用@requestMapping指定Handler方法所对应的url。
spring3.1版本之前org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
spring3.1版本之后org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
访问结果url:http://localhost:8080/spring01/queryItems
前面我们清楚了一下流程,现在我们看看spring源码分析,到底这些流程是怎么来的。
DispatcherServlet:前端控制器,中央指挥机器,降低组件之间的耦合度。
HandlerMappring: 负责处理器映射,根据url找到Handle
HandlerAdapter:处理器适配器,根据处理器需求执行适配器。可以通过扩展适配器支持不同类型的Handler 例如:Struts2
ViewResolver:视图解析器,根据逻辑视图解析为真正的视图。视图地址=前缀+逻辑视图名+后缀
视图解析器配置:
执行流程:
1、DispatcherServlet
我们进入该类看到doDispatch这个方法有个注释:
这个就是我们的中心处理程序方法:
1】 Dispatcher通过Hander查询handle
2】Dispatcher 通过适配器执行Handler,得到ModelAndView
3】得到ModelAndView,解析视图
解析视图最里层我们看看。再往里,其实就是网request里面放置属性了。
jiangmodle数据填充到request中