Web应用程序中基于MVC模式的前置与后置控制器外文翻译资料

 2022-12-19 17:08:09

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


Web应用程序中基于MVC模式的前置与后置控制器

Md.Khaliluzzaman,Iftekher Islam Chowdhury

Dept. of Computer Science amp; Engineering (CSE)

International Islamic University Chittagong (IIUC)

Chittagong-4203, Bangladesh

摘要:MVC是一种用于构建交互式软件系统的设计模式。它非常流行。由于它是独立的,因此开发人员鼓励对MVC系统进行分层以提高性能。在这方面,本文提出了一种基于MVC架构的重构框架。它作为分层组件,引入了前置控制器,应用于一些重要的模块。一个是自动注入控制器所需的依赖项。另一个是模块化,其用于重用程序中现有应用模块,并且该应用模块是用相同的框架构建的。此外,请求过滤器用于向控制器提供额外的安全层。而且,还使用后置控制器来管理注册的服务并在网页上打印出html视图。将提出的框架与两个现有的基于MVC的Web应用程序框架进行比较,并提供结果以证明其有效性。

关键字:MVC;前置控制器;注入依赖;模块化;请求过滤器;后置控制器

1 前言

之前,大多数Web应用程序都是使用静态HTML页面构建的。不同的商业组织使用静态网页构建其网站,这样所有业务合作伙伴就能够共享信息。静态HTML页面很难维护需要定期更改的内容。商业组织需要动态的方式来定期维护HTML页面内容。然后,他们开始将代码嵌入静态HTML 页面中来制作动态网页。这种方式的主要问题是将业务逻辑嵌入到HTML页面中。这对小型企业组织有利。但是,对于大型企业组织来说,这不是一个好的解决方案。 引入MVC(模型/视图/控制器)体系结构是因为商业需要新的体系结构将业务逻辑与表示层分离。

MVC架构因其将业务逻辑与表示层隔离并支持关注点分离而更受欢迎。该架构提供三个部分Model,View与Controller。 Model负责管理商业组织所需的各种业务逻辑。它既响应来自视图的请求,也响应来自控制器的请求以更新。View表示MVC架构的表示层。View基本上与Model绑定。 它呈现所有UI元素,并相应地将Model数据放置在UI元素中。Controller用于在Model和View之间创建链接。它负责响应用户输入并与数据模型对象的交互。控制器接收来自用户的请求。它验证输入,然后执行修改数据模型状态的业务操作。现在,基于Web应用程序的MVC架构正在一天天成长。大多数复杂的Web应用程序都是使用这种架构构建的。出于这个原因,现在实现这种Web应用程序比以前更难,更耗时。

本节描述了各种应用程序实现和测试的方法。在1中开发了一个轻量级MVC框架。该框架基于两个现有的框架,即spring MVC和mybatis。该框架降低了开发的复杂性并提高了效率。但是,控制器的复杂性没有得到改善。在2中提出了一个健硕的Web应用程序开发框架(XWADF)。 该框架利用MVC设计模式来改进Web应用程序的性能。在3中,作者专注于设计连接器的问题,以解释分布式MVC系统中的依赖性。4中提出了一种灵活的Web应用程序方法。此方法允许开发人员在MVC设计模式中设计并实现分层的编程模型。此模式以分层的方式独立工作。在5中,提出了一个基于MVC的重构框架,该框架支持JavaTM2平台企业版(J2EE)。6中提出了一种教育工具。在该工具中,通过增强用户模型服务器来营造一种基于网络的学习环境。 在同一教育情景中,7引入了一个研究项目。在该项目中,MVC用于满足信息需求。在8中,作者使用MVC方法来实现教育工具中的功能扩展。

本文提出了一个框架,旨在MVC架构中使用前置与后置控制器。这样系统能平滑地执行控制器功能。为了实现这一目标,框架需要分为五个主要部分,传统的MVC设计模式有三个部分。所提出的框架的五个部分是(1)前置控制器,(2)控制器,(3)模型,(4)视图,以及(5)后置控制器。

预控制器有九个主要部分(1)接受用户请求的入口点,(2)创建类实例的应用程序,(3)启动所有所需应用程序的组件,(4)引导服务模块以启动所有已注册的模块组件(5)请求组件检查用户请求的方法类型,(6)URL生成器从用户请求发出URL,(7)路由组件触发控制器并执行基于用户请求的动作 ,(8)请求过滤器验证用户请求,(9)依赖注入器将控制器依赖自动注入控制器类中。

该模型存储控制器命令检索的各种业务逻辑和数据。该视图基于控制器类提供的模型数据生成html输出。如果更改了模型数据,则视图中显示的数据将会更改。控制器作为模型和视图之间的连接器。控制器从模型中获取数据并将此数据提供给视图以生成html输出。并将此html输出发送到前置控制器的路由组件。

后置控制器有两个主要部分(1)调度服务是触发注册模块的调度方法,(2)响应组件是在网页上打印html输出。

本文的其余部分安排如下。在第二节中,描述了传统的MVC方法。在下一节中,使用程序例子解释了提出的框架。第四节体现了框架的性能。 该文件在第五节中得出结论。

2 传统MVC方法

MVC方法建议将单个问题划分为三个部分:模型,视图和控制器如图1所示。各种业务逻辑都保存在模型中。视图仅负责渲染输出。控制器作为模型和视图之间的传递器。模型,视图和控制器是独立的。控制器接收用户请求,然后控制器与模型通信以发送业务逻辑使用的数据。之后,此数据将发送到视图来渲染页面。所有类型的用户交互仅发生在控制器上。

图1:传统MVC方法

2.1 控制器

控制器是模型和视图之间的连接器。它接受用户请求并调用模型来处理用户需要的所有数据。此数据发送到视图以显示输出。这些数据取决于用户的操作。

2.2 模型

该模型包含各种业务逻辑和数据。它还负责与数据库通信,从数据库中获取业务逻辑或用户所需的数据。各种计算工作都在模型中完成。

2.3 视图

视图是MVC方法的表示层。它主要从控制器提供的模型中获取数据,并使用此数据为用户的操作输出。视图还可以有一个帮助程序,它将检索与渲染相关而与当前请求无关的信息。

2.4 传统MVC的问题

由于目前的传统MVC方法不提供访问控制器的请求过滤,导致没有任何请求过滤器。所以任何人都可以访问控制器。而且,此方法从未描述任何有关依赖注入和添加扩展模块的方法。控制器可能有许多依赖项。如果我们手动注入控制器的所有依赖项,当控制器具有许多依赖项和嵌套依赖项时,它会使控制器更加复杂。

3 提出的框架

在本节中,会使用程序示例详细的描述所提出的框架。该框架分为五个主要部分,而传统的MVC框架由三部分组成。提出的框架的五个部分是(1)前置控制器,(2)控制器,(3)模型,(4)视图,以及(5)后置控制器。提出的框架如图2所示。

图2:提出框架的工作流程

3.1 前置控制器

前置控制器接受用户请求并加载应用程序所需的所有组件和已注册模块。它还负责验证用户请求并注入控制器所需的所有依赖项。

前置控制器的入口接受用户请求,然后创建一个应用程序类的实例,该应用程序类加载应用程序类所需的所有组件。应用程序类还会加载在应用程序中注册的所有模块。然后,应用程序类调用请求组件的请求类型检查器以获取用户请求的方法类型。之后,应用程序类调用URL生成器组件的URI方法来获取用户请求的URI。URI和请求类型被发送到路由组件的dispatch方法。路由组件首先尝试将URI与路由组件的所有已注册路经进行匹配。如果路由组件找到任何匹配项,则路由组件调用过滤请求方法以检查访问URI的所有已注册过滤器。如果用户的请求被请求过滤器验证通过,则路由组件调用invoke方法。之后,invoke方法首先以递归方式创建控制器类的所有依赖项的实例,并通过控制器类的构造方法将所有依赖项注入控制器类。最后,调用为URI注册的控制器类中的方法。

前置控制器需要十步来处理一个用户请求。这些步骤分别为:

步骤1:用户发送一个请求来从一个URI中获取数据,并且该请求由入口点接受。

步骤2:入口点创建应用程序类的实例。

步骤3:应用程序类加载所有应用程序组件,模块注册类和注册路径模块。

步骤4:请求组件检查用户请求的请求方法类型。

步骤5:URL生成器组件从用户请求中生成URI。

步骤6:方法类型和生成的URI发送到路由组件的调度方法中,这样已注册的方法能够触发控制器。

步骤7:如果路由组件找到已注册的路径,则用户请求发送到请求过滤器以检查用户请求。如果“路径不匹配”,则路由组件向用户发送“未找到路径”消息。

步骤8:请求过滤器通过URI触发已注册过滤器。

步骤9:如果请求由请求过滤器验证通过,则此请求过滤器将“Null”值返回到路径组件的分配方法。如果请求未验证,则用户请求被终止。

步骤10:路由调度器将“Controller@action”解析为“Controller”作为控制器类,将“action”解析为“Controller”的动作方法。路径调度程序执行“Controller”类的“action”方法。在调用已注册的方法之前,路由组件通过“Controller”类的构造方法注入“Controller”类的所有依赖项。并等待来自控制器的输出。当它从控制器输出时,这些输出就会被发送到应用程序类中。

为了演示前置控制器的所有步骤,需要路径注册的样本以及请求过滤器类,分别如图3和图4所示。

图3:程序实例中的路径注册

根据上面提到的步骤1,用户发送一个请求来从URI中获取数据并且该请求被入口点接受。之后创建一个应用程序类实例(如下文所示),如步骤2所述。

$app = new SunApplication (realpath(__DIR__ .lsquo;/../rsquo;));

调用bootstrap方法来加载应用程序类的所有组件和用户所有已注册的模块类。它只是加载所有必需的类并返回null。入口点,应用程序类,应用程序组件和引导程序服务的过程框图分别如图5(a),图5(b),图5(c)和图5(d)所示。

图4 程序实例中的请求过滤器

图5 过程框图a)入口点b)应用程序类c)应用程序组件,以及d)引导程序服务。

在下一步中,检查用户请求方法类型并返回“GET”作为方法类型。在步骤5中,只需返回“/”作为用户请求的URI。 根据步骤6,“GET”类型的方法和用户请求的URI“/”发送到路由组件的调度方法并等待来自控制器或请求过滤器的结果。请求组件,URL生成器,路由组件和请求过滤器的过程框图分别如图6(a),6(b),6(c)和6(d)所示。

图6. a)请求组件的过程框图b)URL生成器 c)路由组件,d)请求过滤器。

在步骤7中,用户请求从路由组件传递到请求过滤器以验证用户请求。之后,请求过滤器触发“Auth”请求过滤器如图4所示。如果用户被认证,则用户请求返回null到路由组件的调度方法。 否则,请求将被终止。

在前置控制器的最后一步中,路由调度程序将“PageController @ index”解析为“PageController”作为控制器类,将“index”解析为“Controller”的动作方法。路径调度程序执行“Controller”类的“index”方法。在调用“index”方法之前,route组件将“PageController”类的“Page”模型类依赖注入“PageController”类的构造函数方法。路由组件等待来自“PageController”的输出。当它从“PageController”获得输出时,它将输出发送到应用程序类。过程框图如图7所示。

图7 过程框图a)请求过滤器检查,和b)依赖注入。

3.2 控制器

控制器从路径组件中获取过滤的用户请求,并调用模型来处理用户需要的所有数据。并且这些数据发送到视图以生成html然后输出。之后,生成的html发送到路径组件来显示网页。

控制器需要三个步骤来处理从路径组件提供的过滤用户请求。这些步骤是:

步骤1:“action”方法与模型交互并从模型中获取数据。

步骤2:“action”方法从带有模板的视图文件模型数据提交给视图类方法,以生成html视图。

第3步:最后,控制器类将html视图返回给路径组件。

程序实例中的控制器类代码在图8中描述,以演示控制器的所有步骤。

根据控制器运行的步骤1,控制器通过调用“PageController”的“index”方法来执行动作。这些动作能根据应用程序的需要访问模型。“index”方法调用“Page”模型类的“name”方法从“Page”模型类中获取数据如图10所示。由于依赖注入器能将“$ page”属性的“Page”模型类实例注入到“PageController”类的构造函数中,使得程序能够在不创建任何“Page”模型类实例的情况下,直接使用“Page”模型类来访问“PageController”的“$ page”属性。 在下一步中,“Page”模型作为变量名“pageName”,而“Home”作为“pageName”的变量值。

图8 程序实例中的控制器

现在,这个变量名以及其视图模板值发送到视图类的方法中,以生成如图11所示的html视图。模型,视图和控制器的过程框图如图9所示。

在最后一步中,视图类将“lt;h1gt; Home lt;/ h1gt;”作为html输出返回。控制器类将生成的html输出返回给路径

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[19978],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。