Spring MVC
一、 SpringMVC概述:
SpringMVC是WEB层框架,是围绕 DispatcherServlet 而设计的;
DispatcherServlet给处理程序分派请求,执行视图解析,并且处理语言环境和主题解析,此外还为上传文件提供支持。
二、SpringMVC优势:
(1)清晰的角色划分:
1)前端控制器(DispatcherServlet)
2)请求到处理器映射(HandlerMapping)
3)处理器适配器(HandlerAdapter)
4)视图解析器(ViewResolver)
5)处理器或页面控制器(Controller)
6)验证器( Validator)
7)命令对象(Command 请求参数绑定到的对象就叫命令对象)
8)表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)
(2)分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要扩展;
(3)由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;
(4)和Spring 其他框架无缝集成,是其它Web框架所不具备的;
(5)可适配,通过HandlerAdapter可以支持任意的类作为处理器;
(6)可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;
三、运行流程:
1)首先用户发送请求——>DispatcherServlet;
2)DispatcherServlet——>HandlerMapping:HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3)DispatcherServlet——>HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4)HandlerAdapter——>处理器功能处理方法的调用:HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5)ModelAndView的逻辑视图名——> ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6)View——>渲染:View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7)返回控制权给DispatcherServlet:由DispatcherServlet返回响应给用户,到此一个流程结束。
四、使用示例:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd"> <!--配置扫描器--> <context:component-scan base-package="com.qf"></context:component-scan> <!--配置视图解析器(InternalResourceViewResolver)--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/views/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
@Controller public class SpringMVCHandler { @RequestMapping(value = "welcome") public String welcome(){ return "success"; } }