gpt4 book ai didi

java - 从 FacesContext 隐藏 JSP

转载 作者:行者123 更新时间:2023-12-01 05:37:48 24 4
gpt4 key购买 nike

我有一个 JSF 应用程序,其中的 Servlet Filter 配置为 /faces/* 的 urlPattern。我想从 faces 上下文中隐藏 JSP,这样它就不会通过 Servlet Filter。因此,我将其作为 WebContent/Error.jsp 保存在项目的 WebContent 文件夹下,并在 web.xml 中声明如下:

<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/Error.jsp</location>
</error-page>

但是我的 Error.jsp 永远不会被拾取。相反,我看到 404 页面未找到错误。

更清楚地说,我希望我的 Error.jsp 页面 URL 为:

http://localhost:8080/myappname/Error.jsp

但只能通过以下方式访问:

http://localhost:8080/myappname/faces/Error.jsp

当我在 faces-config.xml 中声明任何 view-id 时,情况也是如此。如果我想在 faces 上下文中隐藏错误 JSP,我应该将其保存在哪里?

最佳答案

根据目前提供的信息,看起来应该可以正常工作。您没有<dispatcher>ERROR</dispatcher>在过滤器上,因此每当抛出 NPE 时根本不应该调用过滤器。

显然,NPE 被另一个异常所包围,因为它被抛出到不合逻辑的地方,例如 bean 的构造函数,而不是正常的 bean 操作方法。在这种情况下,JSF 会将其重新抛出为 ManagedBeanCreationException 。容器将获取它而不是 NPE,因此将无法找到错误页面。在容器的默认 HTTP 500 错误页面中,您应该读取堆栈跟踪的最顶层异常,以确定要为其定义错误页面的正确异常。

请记住,像 NPE 这样的运行时异常是开发人员错误(错误!),而不是生产错误,应尽快修复它们。我个人只会使用全局 HTTP 500 错误页面来解决此类错误:

<error-page>
<status-code>500<status-code>
<location>/errors/generic.jsp</location>
</error-page>

对于更具体、真实的生产异常,您始终可以声明更具体的错误页面:

<error-page>
<exception-type>com.example.YourDatabaseAccessException</exception-type>
<location>/errors/database.jsp</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/errors/sessionexpired.jsp</location>
</error-page>

关于java - 从 FacesContext 隐藏 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7875780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com