架构流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理映射器
- 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatherServlet通过HandlerAdapter处理器适配器调用处理器
- 执行处理器Controller,也是后端处理器
- Controller执行完返回ModelAndView
- HandlerAdapter将Controller执行结果ModelAndView返回给DispatherServlet
- DispatherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover视图解析器解析后返回具体view
- DispatherServlet对view进行渲染视图,最后响应客户
组件
springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件
组件扫描器
使用组件扫描器省去在spring容器配置每个Controller类的繁琐
<context:component-scan base-package="cn.itcast.springmvc.controller" />
配置处理器映射器
注解式处理器,对类中标记了@ResquestMapping的方法进行映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功后返回HandlerMethod对象给前端控制器
<!-- 配置处理器映射器-->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
配置处理器适配器
<!-- 配置处理器适配器 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
注解驱动
这里直接配置处理映射器和处理器适配器比较麻烦,可以使用注解驱动来加载
<!-- 注解驱动 -->
<mvc:annotation-driven />
自动回加载映射器和适配器
视图解析器
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置逻辑视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置逻辑视图的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
逻辑视图名需要在Controller中返回ModelAndView指定,比如逻辑视图名为user_list,最终会返回jsp视图地址
//配置视图解析器可以不必要再存放视图了
//view.setViewName("/WEB-INF/jsp/user_list.jsp");