SpringMVC
SpringMVC概述
什么是SpringMVC
-
SpringMVC就是一个Spring内置的MVC框架。
-
MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化等等),而且使用简单,与Spring无缝集成。支持 RESTful风格的URL请求。
-
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
SpringMVC作用
MVC模式(Model-View-Controller):解决页面代码和后台代码的分离。
SpringMVC原理
如果使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。
SpringMVC执行流程和原理
流程图
流程描述
01 用户发送出请求被前端控制器DispatcherServlet拦截进行处理。
02 DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03 HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04 DispatcherServlet调用调用具体的处理器(Handler/Controller)。
05 Controller执行完成返回ModelAndView对象。
06 HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
07 DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
08 ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServlet。
09 DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
10 DispatcherServlet响应View给用户。
涉及组件分析
1 前端控制器DispatcherServlet(不需要程序员开发)由框架提供,在web.xml中配置。
作用:接收请求,响应结果,相当于转发器,中央处理器。
2 处理器映射器HandlerMapping(不需要程序员开发)由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
3 处理器适配器HandlerAdapter(不需要程序员开发)由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler中的方法。
4 处理器Handler(也称之为Controller,需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
5 视图解析器ViewResolver(不需要程序员开发)由框架提供。
作用:进行视图解析,把逻辑视图解析成真正的物理视图。
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、ThymeleafView等。
6 视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarkerf等)
流程总结
SpringMVC需要程序员完成的工作有三个:
1 配置前端控制器DispatcherServlet。
2 开发后端控制器Handler/Controller。
3 开发视图View。
SpringMVC常用注解
-
@Controller
负责注册一个bean 到spring 上下文中 -
@RequestMapping
注解为控制器指定可以处理哪些 URL 请求 -
@RequestBody
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上 -
@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区 -
@ModelAttribute
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中
-
@RequestParam
在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法 -
@PathVariable
绑定 URL 占位符到入参 -
@ExceptionHandler
注解到方法上,出现异常时会执行该方法 -
@ControllerAdvice
使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常