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

各位都知道,我们可以在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安装目录下的conf/web.xml最后的</web-app>之前增加如下代码:


<error-page>
                          
<error-code>404</error-code>
                          
<location>/ErrorPage404.jsp</location>
</error-page>
常见问题及解决:
404错误页出现这个问题,我在web.xml定义了如下的定义,


    <error-page>
    
<error-code>404</error-code>
    
<location>/error_404.htm</location>
  
</error-page>
    路径的是对的,奇怪的是我测试时输入一个不存在的页,出现404错误提示出现的却不是我所定义的页面,这就怪了.我记得在weblogic中我也是这样定 义的,所以我首先想到的时服务器的问题. 只是这种问题,不要分析,我试着在javaworld发了一贴,问了一下. 在google上搜了一下,才发现很多人都出现过这个问题.这是实际出问题,要是一直照着课本,应该不会想到这些问题,只是自己实际操作的才发现这些.

通看了所有的帖子,出现这种问题,主要有以下几个因素:
1.使用 tomcat 服务器
2.tomcat服务器版本
3.浏览器问题
4.IE的设置
5.错误页本身的大小

第一点,我想我的经历应该可以算个证明.

第二点.很多人用tomcat5.5可以顺利的找到错误页

第三点.换了一下FF,可以顺利找到指定的错误页

第四点.我设置了 工具-->Internet选项-->高级--->显示http友好错误信息(取消选择) ,可以顺利定向到指定错误页,说明可以,不过好像不能要求别人都这么干。

第五点,我试着发狠输了一大堆东西进去, 指定错误页顺利出现了.


下面是提供的解决方法:

1.升级tomcat (换成其它服务器,代价沉重)
2.ie 设定   工具-->Internet选项-->高级--->显示http友好错误信息(取消选择) ,
3. 把错误页做大一点,具体几个字节,没测试,估计三四百足够了, (加一个div块,display设为none就可以了)
4.设置指定错误页页状态为正确,骗过IE的自定义错误页方法



<%
     response.setStatus(
200); // 200 = HttpServletResponse.SC_OK
%>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值