【发布时间】:2016-01-04 20:36:56
【问题描述】:
dispatcher 类型为ERROR 的请求中的属性javax.servlet.error.exception 总是可以转换为java.lang.Exception 类型吗?
我看了一下the javadoc,但没有提到类型必须是java.lang.Exception OR java.lang.Throwable。
我问这个问题是因为我正在处理错误页面。如果属性javax.servlet.error.exception 始终保持Exception 类型,那么我可以编写如下代码,而无需担心所有情况下的ClassCastException。
Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
我当然可以这样做:
Throwable error = (Throwable)request.getAttribute("javax.servlet.error.exception");
但我的处理方式是 Exception 类型(不是 Throwable)。
谢谢!
【问题讨论】:
-
我不确定你在问什么。您提供的链接中的 ERROR_EXCEPTION_TYPE 类型为
String。 -
谢谢!我输入了错误的属性名称。我修好了。
-
经过您的编辑,我仍然觉得这个问题有些误导:“javax.servlet.error.exception”是
RequestDispatcher.ERROR_EXCEPTION的常量值。但是您主要关心的显然是方法ServletRequest.getAttribute(String)的行为。这就是web.xml和/或ServletRequest.setAttribute(String, Object)发挥作用的地方。 -
@Würgspaß: 但是 servlet 容器会在容器执行 ERROR dispatch 时自动设置异常信息
-
没错。无论如何,在自定义服务器代码中也可能会调用
setAttribute。甚至将来有人会更改web.xml中的设置。所以,为了安全起见,我会准备我的代码......无论如何,问题都与getAttribute / setAttribute有关,真的。这就是我的观点。
标签: java servlets exception-handling requestdispatcher