0

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

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

这将为内部服务器错误提供一个页面

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

这将为servlet 异常提供一个页面

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

这将为所有内容指定默认错误页面

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

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

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

4

1 回答 1

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

于 2016-08-16T22:18:52.583 回答