Tomcat对错误页面处理方法的问题

红薯 发布于 2008/10/05 17:15
阅读 1K+
收藏 6

各位都知道,我们可以在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("回到上页") 得到的结果是: &#22238;&#21040;&#19978;&#39029;

其他的例如JSP可以参考相应的处理办法.

第二个问题是如何获取所发生的异常信息

因为500错误是服务器内部错误,一般是我们的应用发生了异常,我们需要在错误处理页面中获取 到这个异常然后显示相应的信息. 正规Servlet容器通过下面的代码即可取出异常

Throwable t = (Throwable)request.getAttribute(PageContext.EXCEPTION);

偏偏这行代码在Tomcat下取到的都是null, Tomcat容器你必须用下面这个语句来取异常信息

Throwable t = (Throwable)request.getAttribute("javax.servlet.error.exception");

加载中
0
programtic
programtic

如果错误页面是jsp,用utf-8,可以正常显示汉字。我这里测试了。

0
红薯
红薯

引用来自#2楼“张优”的帖子

如果错误页面是jsp,用utf-8,可以正常显示汉字。我这里测试了。

这是08年的帖子哦,不知道现在的Tomcat版本如何。

不过你应该测试各种浏览器哦,一般是IE有问题。

0
programtic
programtic

我用的是tomcat6的版本,ie8没问题。

返回顶部
顶部