SpringMVC流程
01、用户发送出请求到前端控制器DispatcherServlet。02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。(HandlerMappeing帮你找到HelloController类,并创建对象)
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)(调用具体的方法)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
08、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
09、ViewReslover解析后返回具体View(视图)。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。

涉及组件分析
1、前端控制器DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置。 作用:接收请求,响应结果,相当于转发器,中央处理器。2、处理器映射器HandlerMapping(不需要程序员开发),由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
3、处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
4、处理器Handler(也称之为Controller,需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
5、视图解析器ViewResolver(不需要程序员开发),由框架提供
作用:进行视图解析,把逻辑视图名解析成真正的物理视图。
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、pdfView等。
6、视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)
涉及的设计模式
1、门面设计模式SpringMVC的前端控制器DispatcherServlet
2、策略设计模式
SpringMVC 处理器映射器HandlerMapping和处理器适配器HandlerAdapter
根据不同的配置方式有不同的策略,如有注解方式的处理器映射器,有xml方式的处理器映射器
详细见spring-webmvc-4.3.2.RELEASE.jar 包下面 /org/springframework/web/servlet/DispatcherServlet.properties 的相关配置

详细讲解组件的选择
1、View
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)2、HanderMapping 请求映射处理器
作用:根据不同的请求选择最合适的处理器(自己编写的控制器),请求映射处理器可以配置多个,谁最先匹配就执行谁。Spring MVC默认会去/org/springframework/web/servlet/DispatcherServlet.properties配置文件中找到

BeanNameUrlHandlerMapping:处理通过注册的控制器。控制器需要实现Controller接口。
DefaultAnnotationHandlerMapping:处理通过注解@Controller(类标签) 及@RequestMapping(方法标签) 注册的控制器。 该请求映射处理器已经在Spring 3.2 版本过时,替换为RequestMappingHandlerMapping。
spring 中提供的映射处理器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping 简单url请求映射处理器。
在web.xml如下配置
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/helloworld=helloworldController
/helloworld002=helloworldController
</value>
</property>
</bean>
<bean id="helloworldController" class="cn.zj.springmvc.controller.HelloController"/>
结果图:


3、HandlerAdapter 处理器适配
作用: 支持多种类型的处理器,如何来执行"处理器(控制器)
Spring MVC默认会去/org/springframework/web/servlet/DispatcherServlet.properties配置文件中找到

1、 org.springframework.web.servlet.do.HttpRequestHandlerAdapter 处理实现了HttpRequestHandler对应的控制器。
核心代码:
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((HttpRequestHandler) handler).handleRequest(request, response);
return null;
}
2、 org.springframework.web.servlet.do.SimpleControllerHandlerAdapter 处理实现了Controller对应的控制器。
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return ((Controller) handler).handleRequest(request, response);
}
3、 org.springframework.web.servlet.do.annotation.AnnotationMethodHandlerAdapter 处理通过注解方式的控制器。 3.2中已过时,替换为org.springframework.web.servlet.do.method.annotation.RequestMappingHandlerAdapter
4、ViewResolver 视图解析器
作用:根据不同的视图,响应不同的结果,比如普通的jsp或json.Spring MVC默认会去/org/springframework/web/servlet/DispatcherServlet.properties配置文件中找到

InternalResourceViewResolver : 支持默认视图,采用forward,redirect。
视图名:
不写前缀默认为"转发"
视图名字符串前缀:
forward:/xxx.jsp 采用转发。
redirect:/xxx.jsp 采用重定向。
new ModelAndView("forward:/userList");
new ModelAndView("redirect:/userList");
注册视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
本文深入剖析SpringMVC的工作流程,从用户请求到视图渲染的全过程,涵盖DispatcherServlet、HandlerMapping、HandlerAdapter等核心组件的功能与作用,以及设计模式的应用。

7万+

被折叠的 条评论
为什么被折叠?



