美文网首页程序员Java后端
SpringMVC基础知识 (1)

SpringMVC基础知识 (1)

作者: LeaveStyle | 来源:发表于2018-08-31 15:51 被阅读78次

    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近年来备受关注的原因之一。

    相关文章

      网友评论

        本文标题:SpringMVC基础知识 (1)

        本文链接:https://www.haomeiwen.com/subject/ktsswftx.html