各位都知道,我们可以在web.xml中定义对错误发生时的提示页面,例如
<error-page>
<error-code>500</error-code>
<location>/500.vm</location>
</error-page>
在这里我是用一个Velocity的模板页面来负责提示错误信息, 这个配置指明了当程序出现500错误的时候就执行500.vm这个页面.
在编写500.vm这个页面的时候有两个地方需要注意的
第一是编码问题(又是编码问题):Tomcat对这个页面总是用ISO8859_1编码进行处理,所以你对页面再怎么设置编码方式,出来的中文信息都会全变成问号. 因此我们需要顺应Tomcat的做法,将所有的中文字转成ASCII的表达方式,如果是velocity,那你可以用$escape.html("")这个方法来将中文转成ASCII码,例如 $escape.html("回到上页") 得到的结果是: 回到上页
其他的例如JSP可以参考相应的处理办法.
第二个问题是如何获取所发生的异常信息
因为500错误是服务器内部错误,一般是我们的应用发生了异常,我们需要在错误处理页面中获取到这个异常然后显示相应的信息. 正规Servlet容器通过下面的代码即可取出异常
Throwable t = (Throwable)request.getAttribute(PageContext.EXCEPTION);
偏偏这行代码在Tomcat下取到的都是null, Tomcat容器你必须用下面这个语句来取异常信息
Throwable t = (Throwable)request.getAttribute("javax.servlet.error.exception");
心情: 一般