【问题标题】:Dynamic error pages in Java Web App?Java Web App 中的动态错误页面?
【发布时间】:2016-08-16 21:06:48
【问题描述】:

如何动态生成错误页面而不是提供静态页面?或者这是不可能的?

我正在开发我的第一个 Java Web 应用程序,并且我正在尝试了解 web.xml 配置文件的复杂性。我基于the documentation 的理解是,错误页面是通过指定要为给定的HTTP 状态代码或Java 异常提供的静态文件来配置的。比如……

这将为internal server errors 提供一个页面

...
<error-page>
    <error-code>500</error-code>
    <location>/errors/http/500.html</location>
</error-page>
...

这将为servlet exceptions 提供一个页面

...
<error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/errors/java/servlet_exception.html</location>
</error-page>
...

这将是specify a default error page for everything

...
<error-page>
    <location>/errors/index.html</location>
</error-page>
...

但是如何将此信息发送到脚本/类?

我希望我的错误页面非常标准。可能包括徽标、错误代码和基于错误的简短消息。我希望将状态代码或异常类型作为参数传递给脚本/类。有没有办法做到这一点?

【问题讨论】:

  • 不要在任何页面上包含有关异常的数据(或任何其他可以识别您正在使用的服务器/框架的数据)。这是一种安全风险,会向黑客提供有关您的系统架构等的关键数据。
  • @AndrewS 感谢您的提醒,但我已经明确表示我正在使用 Java Web 应用程序,所以假设我将使用javax.servlet 不是一个公平的假设吗?我不觉得那样会付出太多。

标签: java war web.xml custom-error-pages dynamic-pages


【解决方案1】:

基本上你需要:

  1. 将错误页面设置为 servlet 或 jsp(“错误处理程序”)
  2. 在您的错误处理程序中,您将获得几个数据,描述错误,作为请求属性。 例子: 假设您使用 2 个指令配置 web.xml 来处理 404 状态代码和 java.lang.IllegalArgumentException 异常。

当您导致 404 时,错误处理程序将看到以下请求属性:

javax.servlet.forward.request_uri /testwebapp1/errordd 
javax.servlet.forward.context_path /testwebapp1 
javax.servlet.forward.servlet_path /errordd 
javax.servlet.forward.path_info /error 
javax.servlet.error.message /testwebapp1/errordd 
javax.servlet.error.status_code 404 
javax.servlet.error.servlet_name default 
javax.servlet.error.request_uri /testwebapp1/errordd 

javax.servlet.error.status_code包含http状态码

如果您导致 IllegalArgumentException,请求属性将包含一个属性“javax.servlet.error.exception_type”并引发异常。 有关这些常量的更多详细信息,请参见此处 https://tomcat.apache.org/tomcat-7.0-doc/servletapi/constant-values.html

【讨论】:

  • 这似乎正是我所需要的。一旦我测试它,我会批准你的答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2014-12-17
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多