SpringMVC学习(一)--基础入门

MVC模型

  是一种架构型的模式,只是帮助将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离 。
如图所示:
SpringMVC学习(一)--基础入门
  MVC模式是以控制器为核心的开发,将应用强制性划分为3部分:Model模型,采用JavaBeans,用于封装业务逻辑和业务数据。 View视图,采用jsp+jstl实现的,用于实现业务数据的显示和收集客户动作,Controller控制器,采用Servlet实现的[servlet filter xxxListener],用于流程控制。
MVC框架需要实现的功能
  以Controller为核心完成对系统流程的控制管理、从请求中收集数据{request.getParamter—struts2提供了属性驱动、模型驱动和对象驱动}、对传入参数进行验证{Struts2提供两种方法: validate编程实现,validate校验框架(UserAction-login-validation.xml)}、根据请求调用相应业务逻辑完成数据处理【MVC模型并没有提供对应的实现】、将处理结果返回给视图【struts2的Action返回String——逻辑视图名,根据配置跳转具体的物理地址】、国际化支持【I18N国际化、L10N本地化】、针对不同视图技术提供不同的解析方案、针对jsp视图技术提供标签库、通过拦截器链实现面向方面编程完成系统级控制【AOP】、对文件的上传、下载等常用功能的封装。
  
MVC的优点

  • 可以为一个模型在运行时同时建立和使用多个视图
  • 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换
  • 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改

MVC的不足之处

  • 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率
  • 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用
  • 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能
  • 目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难

SpringMVC

  spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
  
Struts2是非常优秀的MVC构架

  • 优点:非常多比如良好的结构,拦截器的思想,丰富的功能
  • 缺点:Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能
  • 而Struts2的多层拦截器、多实例action性能都很好

Spring3 MVC的优点

  • Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多
  • Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序
  • Spring3 MVC的灵活是无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制

SpringMVC应用一般开发步骤:

  • 配置web.xml,指定业务层对应的Spring配置文件,定义DispatcherServlet
  • 编写处理请求的控制器。处理器
  • 编写视图对象
  • 配置Spring mvc的配置文件,使控制器,视图解析器等生效

    具体配置详见
      http://blog.csdn.net/uponz/article/details/79255989

SpringMVC框架的原理图:

SpringMVC学习(一)--基础入门

  1. 整个过程始于客户端发出一个HTTP请求,Web应用服务器接收到这个请求,如果匹配DispatcherServlet的请求映射路径(web.xml下指定),Web容器将该请求转交给DispatcherServlet处理。
  2. DispatcherServlet接收到请求后,将根据请求信息(包括URL,HTTP方法等)及HandlerMapping的配置找到处理请求的处理器(Handler)。可将HandlerMapping看成是路由器,将Handler看成是目标主机。值得注意的是:Spring mvc中并没有定义一个Handler接口,实际上任何一个Object都可以成为请求的处理器。
  3. 当DispatcherServlet根据HandlerMapping得到对应当前请求的Handler后,通过HandlerAdapter的Handler进行封装,再以统一的适配器接口调用Handler。HandlerAdapter是Spring mvc的框架级接口,顾名思义HandlerAdapter是一个适配器,它用统一的接口对各种Handler方法进行调用。
  4. 处理器完成业务逻辑的处理后将返回一个ModelAndView给DsipatcherServlet,ModelAndView包含了试图逻辑名和模型数据信息。
  5. ModelAndView中包含的是“逻辑试图名”而非真正的视图对象,DispatcherServlet借由ViewResolver完成逻辑试图名到真是试图对象的解析工作。
  6. 当得到真实的视图对象view后DispatcherServlet就使用这个View对象对ModelAndView中的模型数据进行试图渲染。
  7. 最终客户端得到的相应消息,可能是一个普通的HTML页面,也可能是一个XML或JSON串,甚至是一张图片或一个PDF文档等不同的媒体形式

MVC 框架 :

  Spring web MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活、松散耦合的 web 应用程序的组件。MVC 模式导致了应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)的分离,同时提供了在这些元素之间的松散耦合。 

  • 模型封装了应用程序数据,并且通常它们由 POJO 组成。
  • 视图主要用于呈现模型数据,并且通常它生成客户端的浏览器可以解释的 HTML 输出。
  • 控制器主要用于处理用户请求,并且构建合适的模型并将其传递到视图呈现。

DispatcherServlet
  Spring Web 模型-视图-控制MVC框架是围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。Spring Web MVC DispatcherServlet 的请求处理的工作流程如下图所示:
SpringMVC学习(一)--基础入门

下面是对应于 DispatcherServlet 传入 HTTP 请求的事件序列: 

  • 收到一个 HTTP 请求后,DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器。
  • 控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。Service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中。
  • DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图。
  • 一旦确定视图,DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中。

上面所提到的所有组件,即 HandlerMapping、Controller 和 ViewResolver 是 WebApplicationContext 的一部分,而 WebApplicationContext 是带有一些对 web 应用程序必要的额外特性的 ApplicationContext 的扩展。

具体案例见:
  http://blog.csdn.net/uponz/article/details/79255989