http://www.javayou.com (收藏,设为首页)
当你不能再拥有时,你唯一能做的,就是让自己不要忘记 (手机请访问 http://3g.dlog.cn/javayou)

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

2006年5月17日(Wednesday) 15点14分 作者: 刘冬 天气: 心情: 一般

各位都知道,我们可以在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");

标签: Tomcat 
评论者: cube316 2006-5-19 22:57 (Friday)
我想问一下如何修改tomcat(5.5.17)的默认时区?

因为系统默认编码是日文的(某些日文软件需要),所以tomcat的输出也是日语的,很不方便。

像Eclipse的话可以在eclipse.ini中增加  -nl en_us 一行来调整,但是tomcat中查了很多文档也没有发现合适的办法,不知这里有无高手指点一二?

谢谢。
评论者: 刘冬 2006-5-30 15:31 (Tuesday)
Tomcat 还真没搞过这样的问题哦
评论者: bym0909 2006-6-2 10:25 (Friday)

怎么在这个500.vm页面中取得 出错页面的地址阿?

麻烦老大知道的话,发个email告我一下吧

评论者: 刘冬 2006-6-2 10:47 (Friday)

出现500.vm的页面时,浏览器的地址栏就是出错页面的地址!$request.getRequestURL()

评论者: 刘冬 2006-9-20 02:59 (Wednesday)
应该说这个方法对其他的应用服务器也是管用的。
姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验