SpringMVC执行流程和原理

本文深入剖析SpringMVC的工作流程,从用户请求到视图渲染的全过程,涵盖DispatcherServlet、HandlerMapping、HandlerAdapter等核心组件的功能与作用,以及设计模式的应用。
摘要由CSDN通过智能技术生成

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值