问题标签 [front-controller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3306 浏览

php - index.php 和前端控制器之间的“正确”分离/差异

index.php对于 PHP MVC 应用程序,文件和前端控制器的工作有什么区别?前端控制器是在 中index.php,还是在单独的文件中?我如何将两者分开并让它们一起工作?前端控制器是否应该是一个类(或像它自己的实体)?(如果是这样,那么 index.php 将实例化前端控制器?)

我知道他们必须“设置环境”,其中包括定义一些常量等,但是做什么呢?(——自动加载器,调试的东西,等等)

我已经看到了这个:MVC with a front-controller chaos,但这并不能解决与index.php前端控制器之间的区别问题。

0 投票
1 回答
247 浏览

java - Java Servlet - 前端控制器问题(侦听器和上下文)

对于我正在进行的当前项目,我决定使用前端控制器模式。我一直认为前端控制器应该(最终)对 Web 应用程序中发生的一切负责。听众会违反这种模式吗?

当然,这似乎比:

这是一个非常简化的例子;在实践中会有更多的参数。那么,哪个片段会被认为更忠实于前端控制器模式——FrontController向下传递配置,还是直接将配置提供给类?

由于我是 Java 新手,我正在尝试在不使用框架的情况下学习 servlet(暂时)。

0 投票
1 回答
164 浏览

php - MVC:如何在主要操作之前/之后运行一些自定义相关操作

以下代码在我的FrontController. run 方法应该调用属于给定 url 的控制器操作。例如http://localhost/admin/index应该指向AdminControllerand indexAction

这已经有效,但是调用其他控制器操作的最佳方式是什么,例如用于构建我的网站导航的操作或带有一些信息的边栏(不在网站的主要部分中)。每个请求都需要导航,因此实现起来没有问题,但是当我必须调用一些依赖于主要操作的操作时,如何构建它?

我的第一种方法是用两种方法调用其他控制器操作,例如runBeforeMainControlleror runAfterMainController。全局配置包含主控制器的信息,在主控制器调用之前或之后需要调用哪些子控制器(动作)。

我的第二种方法是考虑挂钩/事件系统。但我没有找到好的理论解决方案。您对这种方法有一些提示或建议吗?

0 投票
1 回答
81 浏览

java - Web 应用程序中的哪个元素应该负责加载应用程序范围的数据?

考虑一个从前端控制器设计模式构建的 Web 应用程序,包括基于策略模式的操作、.jsp 页面、javabean 和数据库连接,如下图所示: 在此处输入图像描述

如何在我的代码中分配职责,以加载、初始化和更新应用程序范围的数据?

我已经阅读了很多关于这个主题的内容,但是在所有特定于框架的和类似但又如此不同的问答之间,很难找到我正在寻找的东西。

与 ie Android 不同,“java web app 生命周期”——在 google 上搜索,返回的是开发 web 应用程序的过程,而不是运行它。我正在寻找对 Web 应用程序中的生命周期和责任管理的基本了解。

我已经有一个提供程序类,它能够从我的数据库连接、获取数据并将数据排序到 java 对象中。假设这是一个最佳实践解决方案,我应该在 Web 应用程序生命周期/代码的哪个位置引用/创建此提供程序,并存储数据以供应用程序范围使用?

0 投票
0 回答
639 浏览

java - 如何在前端控制器 java servlet Web 应用程序页面中更新我的会话范围数据模型,而无需重新加载网页?

我有一个 MVC 结构的 Web 应用程序。我同时拥有application-session-request范围数据,并且我使用定制的基于请求的 MVC 框架,类似于 Spring 和 Struts 中的框架。我已将此问题的答案用作教程。

我有一个名为 的 java 对象ShowModel,它作为会话范围的数据传递。我使用它来跟踪用户对网页上可见组件的选择。

所有可能的可见性选择都由一个复选框表示。首次设置会话数据时,它们都设置为默认可见/选中。

我在所有复选框上都有一个监听器,它通过类名“toggle”注册更改,并通过 ajax 将其 id 和checked/unchecked状态发送到服务器/servlet。请参阅代码示例 1。我想说我对 ajax 的经验非常有限。

由于我的所有调用都被我的前端控制器 Servlet 拦截,我需要进行相应的操作,以执行 ajax POST-request。此代码已成功到达并执行。请参见代码示例 2。

但是,我的问题是我的操作模式强制重定向。并且以某种神秘的方式,ajax 对象 responsetext 原来是我的索引页面的整个 html。

我的数据模型已经更新,但事实证明,由于前端控制器策略模式,这是一种错误的方法。

那么有谁知道我可以更新会话范围对象的变量而不重新加载整个页面的方法?

代码示例 1

代码示例 2

0 投票
0 回答
137 浏览

c# - 同一解决方案中多个 .Net MVC Web 项目的单个前端控制器

我有一个包含两个 Web 项目(一个 Admin 和一个 Public)以及多个类库的解决方案。我在 Admin 项目中放置了一个前端控制器,每个 Web 请求都会调用它。我的问题是,我在公共项目中创建的所有控制器都不能被管理项目中的前端控制器看到。如何为两个项目使用相同的前端控制器?概括:

管理员 -> 控制器 - 前端控制器 - 其他管理员控制器

Public -> Controllers - 公共控制器(前端控制器不会“看到”这些控制器,因为它们位于另一个项目中)。

谢谢你的帮助。

0 投票
1 回答
816 浏览

php - 用 PHP 理解前端控制器

我对 PHP 很陌生,我已经设法创建了一个非常粗糙的 CMS。目前,它正在使用许多不同的页面和包含。

但是,如果可能的话,我想使用一个控制器而不是有很多页面(我已经有了article.php/admin.php)。

作为一个例子,我试图转换成这样的东西:

这将与 一起使用$_GET['page'],因此管理 URL 如下所示:http://cms.dev/?page=admin

但是,如果我需要转到 admin 的子目录会怎样?例如,如果这些是硬编码页面,我会选择admin/new-post.php. 有没有我可以得到的等价物,使用$_GET method

抱歉,如果这没有得到很好的解释。让我知道,我会尝试编辑它。我已经使用了大量的教程,所以我不是 100% 的。

0 投票
1 回答
716 浏览

php - 为 1 个请求多次调用前端控制器 (app.php)

这是我的问题。

情况

我正在调试 symfony2 应用程序(发布的数据有一些问题)。这一次,我检查了在处理请求时 app.php 和 app_dev.php 被调用了多少次。

示例:请求(来自浏览器):/demo/display/foos

app.php 中的记录器(resp.app_dev.php):

每次调用 logtxt 时,它基本上都会在日志文件中添加一行。

问题

看来,在我的应用程序中,app_dev.php 为单个请求多次调用(大多数是 2 次或 3 次)。我尝试了一个空项目:app.php 或 app_dev.php 仅在每次请求时按时调用。

我正在考虑我会做的重定向,但情况并非总是如此。更神奇的是,同一请求的 app.php 日志计数和 app_dev.php 日志计数有时会有所不同!

我不明白为什么要在请求中多次调用前端控制器。此外,它似乎对生产有一些影响。例如,在一个旧项目中,$_POST 在这些调用之间被重置,并且它的数据似乎丢失了(!)。

例如,对于 1 个相同的请求,我将在 dev 和 prod 环境中拥有:

而使用 app.php 日志:

结果:发布的变量可由控制器在开发环境中使用,但不能在生产环境中用于相同的请求:

解决方案

有人知道这种行为吗?我渴望了解证明这一点的背景,并检查它是否不会导致错误。另外,如果这是由于糟糕的开发实践,我会改变我的。

非常感谢您分享您的智慧!

干杯,

0 投票
1 回答
605 浏览

java - 如何在前端控制器 Web 应用程序中处理 Http 请求竞争条件?

我有一个 Web 应用程序,它是前端控制器模式的实现,如下图所示。具体来说,我遵循了前端控制器模式的代码示例,如this question's answer中所述:

设计模式基于 Web 的应用程序

前控制器

我的 .jsp 页面之一出现更新问题。这个页面特别有一个弹出编辑器,它允许用户添加或删除外部数据库中数据集的链接。如果用户点击保存按钮,它会发送一个请求,该请求被前端控制器拦截。然后,在系统自己的数据库上执行保存或删除参考链接(多对多 ID 号)的正确操作。之后,应该重新加载页面,这会触发一个链接命令,该命令从两个数据库加载数据,然后重定向到基本上相同的页面,而不会弹出。

但是,由于某种我不理解的缓存形式,该页面没有重新加载。我已经尝试了所有我能找到的解决方案,以防止加载缓存的数据,从向 URL 添加唯一值,到在 jsp 页面上添加元标记,以防止它被缓存。我已经确认数据正在服务器端加载。一个简单的 F5 点击更新页面,就像它应该自动做的那样。

我还在弹出窗口上实现了一个 onClose 函数,它调用了 window.location.reload()。然而,这个调用会中断前端控制器,并停止它当前正在做的一切,以处理最新的请求。这会产生竞争条件,在前端控制器开始重新加载页面之前,有时可以插入/删除数据,有时则不能。

我应该排队吗?有充分的理由不这样做吗?Front 控制器的执行方法,还是类本身应该实现某种同步?

0 投票
1 回答
85 浏览

perl - 如何使所有请求都转到 perl 中的“前端控制器”

我第一次在 perl 中制作应用程序,并希望使用前端控制器方法,其中所有请求都通过一个脚本,该脚本根据 uri 委派要加载的页面。

我的脚本是什么样的:

所以在我的 home.html 页面上,有一个指向“project.local/reports”的链接。单击此链接时,我想加载“reports.html”页面。使用这种方法,我可以将所有路线保存在一个地方。

但这不会加载reports.html 页面,我是不是用LWP::UserAgent->get()错了方法?我想我需要一种方法来将所有请求路由到 .htaccess 文件中的脚本,但我完全不知道该怎么做。有人可以帮忙吗?