1. Spring体系结构
如图所示,MyBatis属于其管理下的ORM(持久层映射)层,而SpringMVC则属于Web-MVC处理层的框架。
Spring4体系结构.jpg
Spring MVC有以下优点:
- Spring MVC技术是与Spring框架结合而成的,它同时拥有Spring的优点(例如依赖注入(IOC)和面向切面编程(AOP)等)。
- Spring MVC提供了强大的约定大于配置的契约式编程支持,即提供一种如阿健设计范式,减少软件开发人员做决定的次数,开发人员仅需规定应用中不符合约定的部分。
- 支持灵活的URL到页面控制器的映射。
- 可以方便地与其他视图技术(FreeMarker等)进行整合。由于SpringMVC的模型数据往往是放置在Map数据结构中的,因此其可以很方便地被其他框架引用。
- 拥有十分简洁的异常处理机制。
- 可以十分灵活地实现数据验证、格式化和数据绑定机制,可以使用任意对象进行数据绑定操作。
- 支持RESTful风格。
注: 逆向工程自动生成数据的相关文件的操作,依赖于核心XML配置文件,只有进行了正确的操作,才能获得需要的数据文件。
2. Spring MVC请求流程
Spring MVC流程视图流程如下:
- 一. 用户点击某个请求,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理。
- 二. 前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)去查找Handler。可以一句注解或者XML配置去查找。
- 三. 处理器映射器(HandlerMapping)根据配置找到相应的Handler(可能包含若干个Interceptor拦截器),返回给DispatcherServlet。
- 四. DispatcherServlet请求处理HandlerAdapter去执行相应的Handler(常称为 Controller)。
- 五. HandlerAdapter执行Handler。
- 六. Handler执行完毕后返回给HandlerAdapter一个ModelAndView对象(Spring MVC底层对象,包括Model数据模型和View视图信息)。
- 七. HandlerAdapter接收到Handler返回的ModelAndView后,将其返回给DispatcherServlet。
- 八. DispatcherServlet接收到ModelAndView后,会请求ViewResolver对视图进行解析。
- 九. ViewResolver根据View信息匹配到相应的视图结果,反馈给DispatcherServlet。
- 十. DispatcherServlet收到View具体视图后,进行视图渲染,将Model中的模型数据填充到View视图中的request域,生成最终的View。
- 十一. DispatcherServlet向用户返回请求结果。
各个组件功能:
- 前端控制器(DispatcherServlet)
作用:接受用户请求,然后给用户反馈结果。它的作用相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的扩展。 - 处理器映射器(HandlerMapping)
作用:根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。 - 处理器适配器(HandlerAdapter)
作用:根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。 - 处理器(Handler)
作用:执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装值ModelAndView对象中。 - 视图解析器(View Resolver)
作用:进行解析操作,通过ModelAndView对象中的View信息逻辑视图名解析成真正的视图View(如通过一个JSP路径返回一个真正的JSP页面)。 - 视图(View)
作用:其本身是一个接口,实现类支持不同的View类型(JSP、FreeMarker、Excel等)。
3. Spring MVC和Struts的区别
Struts与Spring MVC类似,也是一款基于传统MVC设计模式的Java EE框架。它的核心是一个弹性的控制层,能够很好地发挥MVC模式的“分离显示逻辑和业务逻辑”的能力。
Spring MVC和Struts都是基于MVC模式的Java EE框架,而近年来越来越多的开发者使用Spring MVC技术来代替Struts技术
,所以来看一下它们之间的具体区别:
- 区别一: Spring MVC基于方法开发,Struts基于类开发。
在使用Spring MVC框架进行开发时,会将URL请求路径与Controller类的某个方法进行绑定,请求参数作为该方法的形参。当用户请求该URL路径时,Spring MVC会将URL信息与Controller类的某个方法进行映射,生成一个Handler对象,该对象中包含了一个method方法。方法执行结束之后,形参数据也会销毁。
而在使用Struts框架进行开发时,Action类中所有方法使用的请求参数都是Action类中的成员变量,随着方法变得越来越多,就很难分清楚Action中那么多的成员变量到底是哪一个方法使用的,整个Action类会变得十分混乱。
相比较,Spring MVC的优点是:其所有请求参数都会被定义为相应的方法的形参,用户在网页上的请求路径会被映射到Controller类对应的方法上,此时请求参数会注入到对应方法的形参上。Spring MVC的这种开发方式类似于Service开发。 - 区别二:Spring MVC可以进行单例开发,Struts无法使用单例。
Spring MVC支持单例开发模式,而Struts由于只能通过类的成员变量接受参数,所以无法使用单例模式,只能使用多例。 - 区别三:经过专业人员大量测试,Struts的处理速度略微Spring MVC慢,原因是Struts使用了Struts标签,Strtus标签由于设计原因,会出现加载数据慢的情况。
这里仅仅比较了Spring MVC在某些方面相比Struts的优势,并不是说Spring MVC就比Struts优秀,仅仅因为早起Struts使用广泛,所以出现的漏洞也比较多,但是在新版本中的Struts中也修复了许多漏洞。Spring MVC自诞生以来,几乎没有什么漏洞,且Spring MVC是基于方法开发的,这一点比较接近Service开发,这是Spring MVC近年来备受关注的原因之一。
网友评论