SpringMVC的请求处理流程(原理)

四、SpringMVC的请求处理流程(原理)

4.1 请求处理流程

SpringMVC通过前端控制器(DispatcherServlet)拦截并处理用户请求

4.2 SpringMVC的核心组件

    DispatcherServlet 前端控制器、总控制器 由SpringMVC提供,无需工程师开发 作用:接收请求,协同各组件工作,响应请求 HandlerMapping 处理器映射器 可配置 SpringMVC提供了多个处理器映射的实现,可以根据需要进行配置 也是由SpringMVC提供 作用:负责根据用户请求的url,找到对应的Handler HandlerAdapter 处理器适配器 作用:按照处理器映射器解析的用户请求的调用链,通过适配器模式完成Handler的调用 Handler 处理器(控制器) 由工程师根据业务的需求进行开发 作用:处理请求 ModelAndView 视图模型 作用:用于封装处理器返回的数据以及相应的视图 ModelAndView = Model + View ViewResolver 视图解析器 可配置 SpringMVC提供了多个处理器映射的实现,可以根据需要进行配置 作用:对ModelAndView进行解析 View 视图 作用:完成数据渲染

4.3 处理器映射器

不同的处理器映射器对URL处理方式也不相同,使用对应的处理器映射器之后,前端请求规则也需要发生相应的变化 SpringMVC提供的处理器映射器 BeanNameUrlHandlerMapping 根据控制器的ID来访问控制器 SipmpleUrlHandlerMapping 根据控制器配置的URL访问(默认)

配置处理器映射器:

    在SpringMVC的配置文件中通过Bean标签的声明处理器映射器 配置BeanNameUrlHandlerMapping,根据Controller的名字进行访问
<!--HandlerMapping对象-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    SipmpleUrlHandlerMapping ,根据Controller的路径进行访问
默认是这种方式的HandlerMapping,根据配置的路径来访问  “/aaa”相当于@RequestMapping("/aaa")
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/aaa">bookController</prop>
        </props>
    </property>
</bean>

4.4 视图解析器

SpringMVC提供了多个视图解析器 UrlBasedViewResolver InternalResourceViewResolver
    UrlBasedViewResolver 需要依赖jstl 添加jstl的依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> 配置视图解析器 <!--id必须是viewResolver,--> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!--指定返回的视图的前缀--> <property name="prefix" value="/"/> <!--指定返回的视图的后缀--> <property name="suffix" value=".jsp"/> </bean> InternalResourceViewResolver <!--id必须是viewResolver,--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--指定返回的视图的前缀--> <property name="prefix" value="/"/> <!--指定返回的视图的后缀--> <property name="suffix" value=".jsp"/> </bean>
经验分享 程序员 微信小程序 职场和发展