问题标签 [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 投票
2 回答
4560 浏览

design-patterns - 使用java servlet实现前端控制器的最佳实践

假设我们有一些具有下一个结构的项目:

请注意,此时我们还没有前端控制器。

在部署了一些方面(让它成为'asdf')之后,我们可以使用下一个 URL 访问我们的页面:

main.jsp 生成一些 html 并包含 sidearts.jsp(通过 jstl c:import 或任何其他方式)

加上前端控制器后会发生什么?

假设我们有 servlet ArticlesController,它负责分派
一些请求并具有下一个映射:

现在当我们请求 URL 时http://localhost:8080/asdf/articles/main,ArticlesController 处理这个请求并尝试包含articles/main.jsp。此时无限循环开始,因为 /articles/* 映射到 ArtsController。

描述的问题的正确解决方案是什么?

我的变种是:

1)为所有jsp文件做映射(我不认为这是可以接受的)

2)更改目录名称(文章->艺术);但后来我们得到了很多新的 URL(如http://localhost:8080/asdf/arts/main.jsp),我认为这可能是错误的来源。

0 投票
3 回答
5279 浏览

php - Zend 框架:删除默认路由

我正在使用 Zend FW 1.9.2,想要禁用默认路由并提供我自己的路由。我真的不喜欢默认的 /:controller/:action 路由。

这个想法是在初始化时注入路由,当请求无法路由到注入的路由之一时,它应该被转发到错误控制器。(通过使用默认注册 Zend_Controller_Plugin_ErrorHandler)

这一切都很好,直到我使用 $router->removeDefaultRoutes(); 禁用默认路由;当我这样做时,错误控制器不再将未路由的请求路由到错误控制器。相反,它将所有未路由的请求路由到默认控制器上的 indexAction。

任何人都知道如何禁用默认的 /:controller/:action 路由但保持路由错误处理?

基本上,这就是我所做的:

0 投票
1 回答
249 浏览

php - 如何重构长前端控制器?

我正在使用前端控制器向用户发送一系列带有问题的页面。几乎所有内容都必须是动态的,因为页面、问题和其他所有内容都在管理界面中设置并存储在数据库中。

我通过在会话中存储唯一标识符并将用户所在的当前页面存储在数据库中来跟踪用户在数据库中的进度,以便我可以找出将它们发送到的下一页。

问题是,有很多特殊情况需要检查。现在控制器有 300 多行,代码写得不好,我是写它的人。另外,在接下来的几周内,我将需要向该系统添加更多内容,例如用户生成的内容和根据用户来自何处显示的不同页面。

我可以看到,如果我组织不好,这个控制器很快就会变得一团糟。

有什么好的方法或想法来重构它?

0 投票
2 回答
582 浏览

zend-framework - 调度程序异常后如何重定向?

在我的引导文件中的 zend 框架上,我有以下代码:

相反,我想重定向到自定义控制器的丑陋消息......如果我不能使用 $frontController 重定向......我该怎么做?

谢谢你的帮助..

0 投票
2 回答
3870 浏览

zend-framework - Zend Framework:如何禁用默认路由?

我花了很多时间试图让它工作。我越来越绝望了。如果有人可以帮助我,那就太好了:)

目前使用 Zend Framework 1.9.5,尽管我现在一直在努力让它适用于许多版本。

我想要做的是通过 XML 配置提供我自己的路由,并确保我的配置中未定义的所有内容都在我的 errorController 上结束。EXCEPTION_NO_CONTROLLER(最好以某种方式让我可以将它们与and分开EXCEPTION_NO_ACTION

我认为这意味着我必须摆脱默认的 /:module/:controller/:action 和 /:controller/:action 路由。

因此,当我告诉路由器 removeDefaultRoutes() 时,它将不再匹配这些默认路由。但是现在路由器现在将每个未路由的路由路由到 defaultcontroller::defaultaction (什么??)

那么,任何人都知道如何让前端控制器(或它的一部分)在无法路由 URI 时抛出异常?

我想这样做的原因是为了防止重复的内容,并有更好的 404 页面(在这种情况下,没有控制器/没有操作错误实际上是应用程序错误而不是未找到)

0 投票
2 回答
9890 浏览

jsp - 如何在 jsf 中创建用户友好和 seo 友好的 url?

例如,我有带有方法的类 ArticlegetTitle ()getContent ().

我也有带有方法的 ArticlesService getAllArticles ()。如何创建具有有意义名称的链接列表(由 组成#{article.title})?像:

..或类似的东西。

我可以用所有必要的功能创建链接<h:commandLink>,但我不知道如何为它制作漂亮的'href':它总是有href'#'。

我可以创建很好的链接,<h:outputLink>但我不知道如何为其添加必要的功能。


在 jsp 中,我创建了自己的前端控制器,它从请求中解析 url,然后重定向到对应的 jsp 页面。

如何在 JSF 中实现相同的功能?

0 投票
2 回答
13036 浏览

jsp - Java 前端控制器

我正在考虑在我的 J2EE 应用程序中实现 Front Controller。您能否通过少量链接(带有源代码示例)和任何要遵循的标准提出相同的建议?

最好的祝福

0 投票
1 回答
873 浏览

zend-framework - Zend Front 控制器

我的网站(单个服务器)使用前端控制器模式作为单一入口点,我知道在任何给定时间点仅存在此控制器的单个实例(单例模式) $frontController = Zend_Controller_Front::getInstance();

令我惊讶的是,如果我在高峰时间获得并发请求/流量(假设一些大数字),控制器的这个单一实例是否会扩大并处理所有请求而不影响客户的响应时间。为什么不能创建一个控制器实例池以使其扩展到流量?

谢谢

0 投票
4 回答
7617 浏览

java - 如何在 Java 中实现前端控制器?

我正在编写一个非常简单的 Web 框架,使用 Java servlet 进行学习。我以前在 PHP 中做过这个,它通过查询请求 URI,然后实例化适当的类和方法来工作。

这在 PHP 中运行良好,因为可以执行类似$c = new $x; $x->$y;. 但是,我不确定如何将其转换为 Java,或者即使这是一种合适的方法。

到目前为止,我已经尝试过:

这对于一些路由来说似乎很好,但它似乎不能很好地扩展,也不允许从配置文件中获取路由。

我应该如何使它工作?

0 投票
2 回答
802 浏览

php - 字符串参数的漂亮 URL

我有一个使用这种风格的网站:/index.php?page=45&info=whatever&anotherparam=2

我计划有漂亮的 url 将以前的 url 转换为:/profile/whatever/2

我知道我必须使用 .htAccess 并将所有内容重定向到 index.php。没关系。

我的问题更多在 index.php (前端控制器)中。如何重建$_GET["info"]$_GET["anotherparam"]能够继续使用$_GET[...]其页面中使用的所有现有代码?

$_GET[...]我是否必须使用一些代码在标题中重新构建 GET,或者我是否必须通过创建自己的数组来摆脱每个页面上的所有内容,该数组将永远解析/并分配类似 :$myParam["info"] = "whatever"而不是在页面中使用$myParam[]而不是$_GET[]

我不想修改所有那些使用$_GET[]

编辑:

我的 .htAccess 看起来像:

不存在的所有内容都转到 index.php。因为我已经使用了这个结构: /index.php?page=45&info=whatever&anotherparam=2没有任何东西被破坏。但是现在我将使用/profile/whatever/2并且在 switch 情况下我可以确定要访问哪个页面,include(..)但问题在于所有 GET 参数。如何构建它们以使用 $_GET[] 从所有页面访问?