一尘不染

Struts2自定义404错误页面从不显示

jsp

我正在为Web应用程序使用struts2框架。在尝试创建自定义404错误页面时,我发现Struts2正在为我做更多的工作。

我只使用struts.xml和web.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" />

当我使用以下网址时:

http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh.jsp

Struts只会显示一个空白屏幕,并且不会处理任何请求(没有拦截器,没有重定向…)。我也觉得这很奇怪,因为我看不到该请求的无效内容(不存在的.jsp文件除外)

所以我想我需要修改struts.xml以便覆盖一些默认的重定向行为(我不希望通过转到首页来掩盖404错误),并且我的web.xml也可以处理任何晦涩的套利请求(因此,用户键入的任何url都会得到处理,而不仅仅是显示空白屏幕。我的配置中缺少什么?

PS:我不是在谈论Java异常/错误,而只是在谈论HTTP错误。hava异常得到了正确处理,就像我希望它们表现那样。


阅读 345

收藏
2020-06-10

共1个答案

一尘不染

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

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

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

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

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>
2020-06-10