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>
