1.SpringMVC Summary
SpringMVC
Spring MVC是一个基于Java的MVC设计模式的Web框架,通过把Model,View,Controller分离,将web层进行解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
SpringMVC常用注解
1. @Controller
@Controller标记该类是Controller
在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务逻辑层处理之后封装成一个Model,然后再把该Model返回给对应的View视图层进行展示。
2. @RequestMapping
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
3. @RequestBody:实现接收http请求的json数据,将json转换为java对象。
4. @ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户。
参数绑定注解
1. @RequestParam
@RequestParam注解用于将制定的请求参数赋值给方法中的形参。如果参数没有接收到任何值,可以使用defaultValue指定参数的默认值。
SpringMVC执行流程
用户发起request请求,该请求被前端控制器DispatcherServlet处理。
DispatcherServlet请求HandlerMapping查找Handler。
HandlerMapping根据配置查找相关的Handler,返回给DispatcherServlet。
DispatcherServlet请求HandlerAdapter执行相应的Handler(Controller)。
HandlerAdapter执行Handler
Handler执行完毕后会返回ModelAndView对象给HandlerAdapter。
HandlerAdapter接收到ModelAndView后,将其返回给DispatcherServlet
DispatcherServlet接收到ModelAndView后,请求View Resolver进行解析
View Resolver根据View信息匹配相应的视图结果,返回给DispatcherServlet
DispatcherServlet接收到View视图后,对视图进行渲染,将Model中的模型数据填充到View视图中的request域,生成最终的视图
DispatcherServlet返回请求结果给用户。
DispatcherServlet
DispatcherServlet的作用是接收用户请求,然后给用户响应结果。相当于一个转发器或者中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合度,有利于组件之间的扩展。
HandlerMapping
HandlerMapping请求到Handler的映射,允许有多个实例。如果映射成功返回一个HandlerExecutionChain对象。
HandlerAdapter
会把Handler包装为适配器,从而支持多种类型的处理器,即适配器设计模型的应用,从而很容易支持多种类型的处理器。
ViewResolver
SpringMVC流程最后返回给用户的视图为具体的View对象,View对象包含Model对象,Model对象存放后端需要反馈给前端的数据。视图解析器把一个逻辑上的视图名称解析为一个具体的View视图对象。
SpringMVC的视图解析流程:
SpringMVC调用目标方法,将目标方法返回的String、View、ModelMap或者ModelAndView都转换为一个ModelAndView对象。
通过ViewResolver将ModelAndView对象中的View对象进行解析,将逻辑视图View对象解析为一个物理视图View对象
调用物理视图View对象的render()方法进行视图渲染,得到响应结果。
SpringMVC和Struts2的区别有哪些?
SpringMVC的入口是一个servlet即前端控制器(DispatchServlet),Struts2入口是一个filter过滤器(StrutsPrepareAndExecuteFilter)。
SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)。Struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
SpringMVC通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面,Jsp视图解析器默认使用jstl。Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据。