SpringMVC中的三大组件

802 阅读2分钟
  • 三大组件简介

HandlerMapping:处理器映射器

HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的 映射方式,例如:配置文件方式,实现接口方式,注解方式等。

HandlAdapter:处理器适配器

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行

View Resolver:视图解析器

View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名 即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

  • 实现逻辑

(1)浏览器提交用户请求到DispatcherServlet 控制器

(2)DispatcherServlet 控制器将请求转给处理器映射器(HandlerMapping)。

(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链斥返回给DispatcherServlet。

(4)DispatcherServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器 (HandlerAdapter)。

(5)处理器适配器调用执行处理器。

(6)处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView中,并将其返回会处理器适配器。

(7)处理器适配器直接将结果返回给DispatcherServlet 控制器。

(8)DispatcherServlet 控制器调用视图解析器(View Resolver),将ModelAndView中的视图名称封装为视图对象。

(9))视图解析器将封装了的视图对象返回给DispatcherServlet 控制器

(10)DispatcherServlet 控制器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。

(11)DispatcherServlet 控制器响应浏览器。

HandlerMapping的实现类的作用

实现类RequestMappingHandlerMapping,它会处理@RequestMapping 注解,并将其注册到请求映射表中。

HandlerAdapter的实现类的作用

实现类RequestMappingHandlerAdapter,则是处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。
  • 三大组件的配置

在springmvc.xml中进行配置

<!--配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view/"  ></property>
    <property name="suffix" value=".jsp"  ></property>
</bean>
```

其中适配器和映射器可以利用mvc注解的方式配置

第一、在配置文件头部加入

xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

第二、开启MVC注解驱动,一个注解替换上面的两个配置

<mvc:annotation-driven/>

当配置了mvc:annotation-driven/后,Spring就知道了我们启用注解驱动。然后Spring通过context:component-scan/标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求,这个时候接收返回json数据、参数验证、统一异常等功能。