我正在为 webapp 使用 Struts 2 框架。在尝试创建自定义 404 错误页面时,我发现 Struts 2 为我做了比预期更多的工作。
我只使用 struts.xmlweb.xml 文件。在 web.xml 文件中,我添加了以下代码:

<error-page>
    <error-code>404</error-code>
    <location>/error/Error404.jsp</location>
</error-page>
现在,当我启动我的 web 应用程序时,它会像往常一样进入主页。当我尝试这种类型的网址时(所有不存在的网址):
http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh
http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh.action
Struts 将处理请求,运行拦截器,并自动重定向到默认页面。我希望我的 404 错误页面显示在这些页面上。我什至在 struts.xml 中删除了这一行,但它仍然重定向!
<default-action-ref name="index" />
当我使用以下 URL 时:
http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh.jsp
Struts 只显示一个空白屏幕,并且没有处理任何请求(没有拦截器,没有重定向......)。我也觉得这很奇怪,因为我看不到该请求的无效内容(除了不存在的 JSP 文件)
所以我想我需要修改我的 struts.xml 以便我可以覆盖一些默认的重定向行为(我不希望通过访问主页来掩盖 404 错误),并且我的 web.xml 还可以处理任何任意模糊的请求(所以任何用户输入的 URL 将被实际处理,而不仅仅是显示空白屏幕。我的配置中缺少什么?
PS:我不是在谈论 Java 异常/错误,而只是在谈论 HTTP 错误。 Java 异常被正确处理,就像我希望它们的行为一样。

最佳答案

我找到了它不显示的原因。

黑屏的问题如下:我的404页面的路径不正确。它应该是从 webContent 文件夹开始的路径,并以斜杠“/”开头。

默认操作的问题可能是服务器重启或缓存问题。我关闭了浏览器和 IDE,然后重新启动了一切。然后 default-action-ref 真的消失了。

我还发现了另一个有趣的怪癖:struts2 只处理 Action 映射,例如:

http://www.mywebsite.com/webapp/whatever
http://www.mywebsite.com/webapp/whatever.action

但它不会像这样处理服务器资源(注意文件扩展名)
http://www.mywebsite.com/webapp/whatever.zip
http://www.mywebsite.com/webapp/whatever.jsp
http://www.mywebsite.com/webapp/whatever.html

您可以通过在 web.xml 文件中添加额外的过滤器映射来解决此问题:
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/error/*</url-pattern>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

关于jsp - Struts 2 自定义 404 错误页面从不显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24106197/

10-13 00:40