【发布时间】:2009-11-03 11:48:37
【问题描述】:
什么是 MVC 中的控制器?
是struts.xml 还是Servlet(动作类)?
我们的应用程序中可以有多个Controller 吗?
拥有多个控制器是一种好习惯吗?
【问题讨论】:
标签: java model-view-controller design-patterns jakarta-ee struts
什么是 MVC 中的控制器?
是struts.xml 还是Servlet(动作类)?
我们的应用程序中可以有多个Controller 吗?
拥有多个控制器是一种好习惯吗?
【问题讨论】:
标签: java model-view-controller design-patterns jakarta-ee struts
在 Struts 中,应用控制器层代码/功能分为两部分:
ActionServlet 和 RequestHandler
Action 班级ActionServlet 的行为类似于 FrontController pattern。
图片来自this OnJava article。
【讨论】:
ActionServlet 是 IMO 控制器。
在更广泛的范围内,ActionServlet 连同RequestProcessor 和Action 以及来自struts-config.xml 的初始化信息可以称为struts 应用程序中的控制器。
【讨论】:
struts.xml 是控制器。你可以看看这个Struts 2 Architecture
【讨论】:
控制器负责拦截用户输入并将其转换为模型要执行的操作。控制器负责根据用户输入和模型操作的结果选择下一个视图。 Controller接收浏览器的请求,调用业务操作,协调视图返回给客户端。
每当对任何资源的请求出现时,它首先会转到控制器。 简单来说,我们可以说控制器是一个导航器。它的工作是为传入的请求找到相应的动作类并将其转移到该特定动作。 或者用技术术语来说,我们可以说它执行映射。
控制器由 java servlet 实现,该 servlet 是 Web 应用程序的集中控制点。在 struts 框架中,控制器的职责由几个不同的组件实现,例如
ActionServlet 类 RequestProcessor 类 动作类
有关这方面的更多参考,您可以转到以下链接 http://www.allapplabs.com/struts/struts_controller.htm
【讨论】:
基于 Struts 的控制器是由许多部分组成的"component"。 Custom Action classes 由应用程序开发人员编写。 Struts ActionServlet 由框架提供。 struts-config.xml 配置文件由应用程序开发人员编写。读取此文件并创建 Action** 对象的代码由框架提供。所有这些元素加在一起就是"Controller"
有关 Struts Action 包的更多信息,请参阅下面的 API 文档:
http://struts.apache.org/1.x/apidocs/org/apache/st...ts/action/package-summary.html
【讨论】:
struts Action 类实际上是控制器,因为它确定在处理请求(来自浏览器)中接下来应该发生什么。 Action 类有一个包含控制器逻辑的执行方法。 Action 类是使用Command Pattern 的一个很好的例子。
struts-config.xml 包含确定请求转发到哪个控制器(Action 类)的路由信息。 拥有多个控制器是一种很好的做法,根据经验,每个视图都有一个控制器,但这不是严格的规则,如果视图很复杂并且具有不同的功能,则每个视图可能有多个控制器值得在控制器内分离关注点。
另外,请注意不要让您的控制器类负担业务逻辑,这会导致控制器内的代码重复,当代码应该被分解到 MVC 应用程序的模型层中的业务类时。
【讨论】:
如您所知,MVC 代表模型 - 视图 - 控制器。
简单地说,Model 包含我们的业务组件和逻辑,View 包含我们的 Presentation 技术,而 Controller 控制控制流和应用程序的工作。
在Struts
Struts 有两个版本:Struts 1 和 Struts 2。
**这两个是不同的框架。
Struts 1 基于 Servlet。它有一个ActionServlet 作为它的控制器。
而在 Struts 2 中我们有过滤器。在此我们可以使用像 FilterDispatcher 或 StrutsPrepareAndExecuteFilter 这样的过滤器来充当我们的控制器。
**在 Struts 2 中,动作充当模型。
Controller 的主要工作是决定哪个 Action 类将处理哪个请求,而控制器通过我们在 struts.xml 文件中定义的 Configuration 或在 Struts 2 的情况下通过注解来执行此操作。
【讨论】:
我们知道,如果我们使用 MVC,我们必须在 web.xml 中声明一个前端控制器。即在struts2中有两个可用的过滤器
前端控制器
1)org.apache.struts2.dispatcher.FilterDispatcher 2)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
而这些前端控制器负责加载struts.xml文件
在 struts.xml 中,每个 form name attributes 都会得到处理。 操作完成后,控制器将返回到要转发的页面(此操作再次由前端控制器负责)。
希望对你有帮助
【讨论】:
预定义的 servlet 类是控制器,它使用 structs-config.xml 来管理或控制您的整个应用程序。
不,您的 struts 中不能有多个控制器 应用它只是违反 MVC 规则(你不能拥有更多 您的应用程序中只有一个 servlet)struts 是基于 MVC 设计的。
【讨论】: