设为首页 收藏本站
查看: 221|回复: 0

[经验分享] Tomcat对错误页面处理方法的问题

[复制链接]

尚未签到

发表于 2017-2-4 12:18:25 | 显示全部楼层 |阅读模式
  各位都知道,我们可以在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>之前增加如下代码:


DSC0000.gif <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
%>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-337417-1-1.html 上篇帖子: tomcat 下 java.lang.OutOfMemoryError 其解决方法 下篇帖子: tomcat容器下配置web和wap的域名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表