gpt4 book ai didi

java - 为 JSF 应用程序指定外部错误页面

转载 作者:行者123 更新时间:2023-12-01 05:00:13 26 4
gpt4 key购买 nike

我目前正在维护旧版 ICEFaces 1.8.2 Web 应用程序,我想知道是否可以在其 web.xml 文件内定义外部 URL,以便应用程序生成错误时使用。

主要原因当然是不向客户显示默认的 Tomcat 6 错误页面。另外,我无法将内容包含在应用程序的 .war 文件中,因为我公司的另一个部门正在管理这些页面的内容。

特别是,我对显示错误 404、500 和 503 的自定义页面感兴趣。

我尝试对应用程序的 web.xml 文件进行此修改:

<error-page>
<error-code>500</error-code>
<location>http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>http://myproduction-site.com/error/HTTP_NOT_FOUND.html</location>
</error-page>

但是,我认为在 web.xml 文件中指定这些值是非法的。

如果有帮助的话,我的 Tomcat 6 服务器前面有几个 Apache 服务器通过粘性 session 进行负载平衡。每当 Tomcat 服务器内部发生错误时,是否可以指示 Apache 服务器重定向到这些页面?

还有其他我可能没有考虑的替代方案吗?

感谢您的时间和帮助!

最佳答案

web.xml 不可能做到这一点。

错误页面位置必须准确引用资源路径,该路径在作为参数传递给 RequestDispatcher#forward() 时将产生所需的结果。 。该方法不接受外部 URL。它只接受webapp自己的资源。

最好的办法是在本地创建错误页面,然后导入外部错误页面。其中一种方法是使用 HTML <iframe> ,像这样:

<!DOCTYPE html>
<html lang="en">
<head>
<title>HTTP Internal Server Error</title>
<style>
html, body, iframe {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
html, body {
overflow: hidden;
}
</style>
</head>
<body>
<iframe src="http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html"></iframe>
</body>
</html>

另一种方法是使用带有 JSTL 的遗留 JSP 页面 <c:import> 它实际上将目标 URL 的整个 HTML 响应嵌入到当前响应中,而不需要 iframe(是的,确实是 JSP; Facelets 不支持 <c:import> )。

<%@taglib prefic="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:import url="http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html" />

请注意,如果此错误页面又包含对 CSS/JS/图像文件和表单的相对 URL 引用,例如 <script src="some.js"> ,那么他们都会失败。如果它们不能固定为绝对 URL,那么 iframe 确实是您唯一的手段,前提是错误页面本身不包含一些脱离框架的 JavaScript(大多数现代网站都具有这种功能,以防止网络钓鱼攻击) )。

关于java - 为 JSF 应用程序指定外部错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484115/

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