Spring MVC
1.框架
框架(Framework)是整个或部分系统的可重设计,表现为一组抽象构件及构件实例间交互的方法,规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系责任分配和
流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文关系。
2.MVC模式
MVC架构是"Model-View-Controller"的缩写,中文"模型-视图-控制器"。
模型(Model):负责封装应用的状态,并实现应用的功能,通常分为数据模型和业务逻辑模型(数据模型用来存放业务数据,业务逻辑模型包含应用的业务操作)
视图(View):用来将模型的内容展示给用户
控制器(Controller):用来控制应用程序的流程和处理视图所发出的请求
交互关系:
(1) 展示视图给用户,用户在视图上进行操作
(2) 用户提交请求到达控制器,在请求中包含了想要完成的业务功能和相关数据
(3) 控制器处理用户请求,把请求数据进行封装,然后选择并调用合适的模型,请求模型进行状态更新然后选择接下来要展示给用户的视图
(4) 模型会处理用户请求的业务功能,同时进行模型状态维护和更新
(5) 当模型状态改变时,会通知相应视图,然后视图获取需要展示的数据,展示给用户
3.MVC框架的功能
1.以Controller为中心完成对系统流程的控制管理
2.从请求中收集数据
3.对传入的参数进行验证
4.根据请求调用相应业务逻辑完成数据处理
5.将处理结果返回给视图
6.国际化支持
7.针对不同视图技术提供不同的解析支持方案
8.针对jsp视图技术提供标签库
9.通过拦截器链实现面向方面编程完成系统控制
10.对文件上传、下载等功能的封装
4.Spring MVC的核心
1.DispatcherServlet
2.Controller控制器
3.HandlerMapping
4.ViewResolver & View
5.Interceptors 拦截器
6.LocalResolver
7.Validate依赖注入
流程:
SpringMVC控制的资源发起请求时,都会被DispatcherServlet处理,接着Spring会分析是哪一个HandlerMapping定义的所有请求映射中存在对该请求最合理的映射,取得
对应的Handler,接着相应的HandlerAdapter处理该Handler,处理之后会返回ModelAndView对象,Spring会把该View对象渲染给用户,在渲染的过程中,发挥作用的是
ViewResolver 和 View。当Handler返回的ModelAndView中不包含真正的视图,只返回一个逻辑视图名称的时候,ViewResolver就会把该视图解析为真正的视图View对象
然后返回给用户(返回给浏览器)
5.Spring MVC常用的Controller
直接实现Controller接口或AbstractController抽象类
ModelAndView对象
用于直接跳转页面的ParameterZableViewController.UrlFilenameViewControllerionController
在同一控制器类处理多个请求的MultiActionController具体调用的方法通过MethodNameResolver决定
能封装表单参数的CommondConroller、FormController
6.Spring MVC常用的Handler Mapping
默认的ControllerClassNameHandlerMapping
常用的SimpleUrlHandlerMapping
BeanNameUrlHandlerMapping
基于注解Controller时使用的DefaultAnnotationHandlerMapping
7.Spring MVC常用的ViewResolver & View
InternalResourceViewResolver、UrlBasedViewResolver
CommonsMultipartResolver(文件上传解析器)
XmlViewResolver
JstlView,ExcelView及自定义View(jsperReport,Pdf,Excel)
8.基于注解的MVC
@Controller控制叠的注解不去实现Controller接口就能识别类是一个控制器
@ResponseBody
@RequestMapping("/路径/{参数}/{参数}")
1.加载请求方法之前{}中的参数用于url传值,可以在;零个或多个注解方法时,被注解的方法可以用的参数:@PathVariable、HttpServletResponse、HttpSession
@Request(请求主参数的注解)、@CookieValue、@RequestHeader(请求头的注解)等。返回值类型void(生成隐含的viewName,按请求路径查找视图)
2.加载类之前当注解类发送的url请求路径相对于类@PathVariable(参数名),抓取url路径参数的注解,参数名必须和一个RequestMapping中的参数相同,不同的请求
方法映射不同的处理方法只需要RequestMapping的Method的值不同(get,post)
3.@InitBinder(初始化绑定器的注解)