Struts基础(一)

发布时间:2019-08-15 06:00:01发布者:Mr.Zhang阅读(227)

1、Struts开发基础

1.1  MVC的基本概念

  mvc将一个应用系统的输入、处理和输出流程按照Model(模型)、View(视图)和Controller(控制器)三部分进行分离,划分成模型层、视图层和控制层。三层之间以最少的耦合来协同工作,从而提高了应用

系统的可扩展性和可维护性。

   MVC思想的核心就是分层。它将系统的各个组件进行分类,不同的组件扮演不同的角色,然后将系统中的组件分隔到不同的层中,这些组件将被严格限制在其所在的层内。各层之间则以松散耦合的方式组合在一起,从而保证良好的封装性。MVC三层之间的关系如图所示。

1. 模型层

  模型层代表的是数据和其对应的业务逻辑。它负责对数据进行处理和更新。通常,模型和现实世界对数据的处理过程类似,业务处理的过程对于视图层和控制层来说是黑箱操作:模型层接受视图层(通过控制层传送到)的请求数据,并返回最终的处理结果,以更新视图层。

2.视图层

  视图层实际上是模型层中各个模型的具体表现形式。它通过模型得到数据,然后再根据需要进行显示。视图层必须保持着与模型层的数据模型一致,即当模型层的数据发生变化时,视图层必须随之变化。

3.控制层

  控制层在MVC结构中连接模型层和视图层,起到了纽带的作用。它将视图层的交互信息进行过滤等处理后,再传送到模型层相应的逻辑业务处理程序进行处理。

  在Web应用中,视图层首先向控制层发送信息,控制层接收到请求后,再把请求信息传递给模型层,告知模型应该做什么处理,接着,模型接受请求数据,并产生最终的处理结果。模型层对应的动作包括:业务处理和模型状态的改变,最后根据模型层产生的结果,控制层将数据反馈给用户,并在浏览器中显示。

  总的来说,MVC有如下特点:

  • 低耦合性。MVC架构通过分层,降低了层与层之间的耦合,提高了程序的可扩展性,有助于程序员灵活的进行编码。
  • 一个模型可以对应多个视图。按照MVC的设计模式,一个模型对应多个视图,可以提高代码的可维护性。即使模型发生改变,也方便维护。
  • 模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,各层只负责自己的任务,而不用去管其他层的任务。
  • 有利于工程化管理。MVC将不同的模型和不同的视图组合在一起进行管理,层与层之间分离,每一层都有各自的特色。由于代码可复用,因此降低了软件开发周期。

1.2 Struts的工作原理

1.Struts概述

  Struts1是真正意义上的MVC模式,,但Struts1在性能高效、松耦低侵入等方面存在着不足之处。所以Struts2出现弥补了Struts1这方面的缺陷和不足,并且还提供了更加灵活与强大的功能。

  Struts2并不是Struts1的升级版,而是一个全新的框架。它将Struts技术与WebWork技术完美地结合起来,所以功能更加灵活。

2.Struts2工作流程

  Struts2是一个全新的开发框架,如图所示为Struts2的体系结构图。

  • 橙色是Servlet Filters,过滤器链,所有的请求都要经过Filter链的处理。
  • 浅蓝色是Struts Core,Struts2的核心部分,Struts2中已经做好的功能,在实际开发中不需要动它们。
  • 浅绿色是Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能。
  • 浅黄色是User Created,由开发人员创建的,包括struts.xml、Action、Template,是每个使用Struts2来进行开发的人员都必须会的。 

各自功能:

  • FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
  • ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
  • ActionProxy是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
  • ConfigurationManager是xwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。
  • struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置等。
  • ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。
  • Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter。
  • Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。
  • Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。
  • Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。
  • Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。

Struts2处理请求步骤:

  1. 用户发出一个HttpServletRequest请求。
  2. 该请求经过一系列的过滤器Filter来传送。
  3. 调用FilterDispatcher。FilterDispatcher是控制器的核心,它通过询问ActionMapper来确定该请求是否需要调用某个Action。如果需要调用某个Action,则FilterDispatcher就把请求转交给ActionProxy处理。
  4. ActionProxy通过配置管理器Configuration Mannager询问框架的配置文件Struts.xml,从而找到需要调用的Action类。
  5. ActionProxy创建一个ActionInvocation的实例,该实例使用命名模式来调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor。
  6. 一旦Action执行完毕,ActionInvocation实例就根据Struts.xml文件中的配置找到相对应的返回结果。返回结果通常是一个JSP或者FreeMarker的模板。其中,FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或Http。

 





本文转自博客园,原文地址:https://www.cnblogs.com/liyushan/p/11355229.html