一、MVC模式
二、什么是SpringMVC
三、SpringMVC的处理流程
四、SpringMVC的框架特点
五、入参和出参
六、视图解析器
一、MVC模式
- M-Model模型层:JavaBean
- V-View视图层:JSP或者HTML文件
- C-Controlle控制层:Servlet
MVC优点
- MVC三个模块相互独立,松耦合架构
- 多视图共享一个模型,大大提高代码的可重用性
- 控制器提高了应用程序的灵活性和可配置性
- 有利于软件工程化管理
MVC缺点
- 增加了系统结构和实现的复杂性,不适合小型规模的项目
- 视图层与模型之间需要控制器做中间的连接控制,所以效率较低
二、什么是SpringMVC
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
架构组成
- 前端控制器(Front Controller)Spring MVC框架的核心组件,是一个Servlet,负责接收所有的HTTP请求并将其分派给相应的处理程序。
- 处理程序映射器(Handler Mapper):根据请求的URL映射到合适的处理程序。
- 处理程序(Handler):执行实际的业务逻辑,并生成模型数据供视图渲染。
- 视图解析器(View Resolver):根据处理程序返回的逻辑视图名解析为具体的视图对象。
- 视图(View):负责将模型数据渲染为用户可见的内容,如HTML页面或JSON数据等。
- 拦截器(Interceptor):在请求的预处理和响应的后处理阶段进行拦截,可以用于日志记录、权限检查等功能。
三、SpringMVC的处理流程
- 用户发送请求到前端控制器(DispatcherServlet)。
- 前端控制器 ( DispatcherServlet ) 收到请求调用处理器映射器 (HandlerMapping),去查找处理器(Handler)。
- 处理器映射器(HandlerMapping)找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
- 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。
- 处理器适配器(HandlerAdapter)去调用自定义的处理器类(Controller)。
- 自定义的处理器类(Controller)将得到的参数进行处理并返回结果给处理器适配器(HandlerAdapter)。
- 处理器适配器 ( HandlerAdapter )将得到的结果返回给前端控制器 (DispatcherServlet)。
- 前端控制器(DispatcherServlet )将 ModelAndView 传给视图解析器 (ViewReslover)。
- 视图解析器(ViewReslover)将得到的参数从逻辑视图转换为物理视图并返回给前端控制器(DispatcherServlet)。
- 前端控制器(DispatcherServlet)调用物理视图进行渲染并返回。
- 前端控制器(DispatcherServlet)将渲染后的结果返回。
四、SpringMVC的特点
- 角色划分清晰
- 配置功能灵活
- 大量的控制器接口和实现类
- 可灵活选择View层实现技术
- 支持国际化
- 面向接口编程
- 功能丰富
五、入参和出参
入参@RequestParam
- name
- value
- required
- defaultValue
ModelAndView :包含模型数据信息和视图信息
常用方法
- 添加模型数据
ModelAndView addObject(String attributeName,Object attributeValue);
ModelAndView addAllObjects(Map<String,?> modelMap);
- 设置视图
void setView(View view);
void setViewName(String viewName);
出参Model
处理方法的入参为Model类型
数据结构:Map类型
常用方法:添加模型数据
注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key
六、视图解析器
ViewResolver:将逻辑视图名与JSP等视图技术进行匹配
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>