栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

服务器如何确定使用哪种类型的web.xml错误页面的优先级?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

服务器如何确定使用哪种类型的web.xml错误页面的优先级?

这并非特定于Tomcat。这特定于Servlet API。如何确定错误页面在Servlet
API规范2.5的
第9.9.2节中指定。这是相关的摘录:

SRV.9.9.2错误页面

如果没有使用类层次结构匹配的

error-page
包含声明的声明
exception-type
,并且抛出的异常是其
ServletException
子类或子类,则容器将提取该
ServletException.getRootCause
方法定义的包装后的异常。对错误页面声明进行第二遍处理,再次尝试与错误页面声明进行匹配,但改用包装的异常。

因此,您

SpecificExceptionA
很可能被包裹在
ServletException
,因此,
java.lang.Throwable
是第一遍最接近的比赛。当您删除该条目时,将通过包装的异常进行第二次传递,从而
SpecificExceptionA
获得匹配。

定义常规HTTP 500错误页面的正确方法是将其映射,

error-pre
而不是
exception-type

<error-page>    <exception-type>org.SpecificExceptionA</exception-type>    <location>/WEB-INF/views/error/timedout.jsp</location></error-page><error-page>    <error-pre>500</error-pre>    <location>/WEB-INF/views/error/error.jsp</location></error-page>

如果由于某些不清楚的原因而无法使用此选项,则解决此问题的方法之一是创建一个

Filter
侦听
url-pattern
of的a
/*
并基本上执行以下操作:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {    try {        chain.doFilter(request, response);    } catch (ServletException e) {        Throwable rootCause = e.getRootCause();        if (rootCause instanceof SpecificExceptionA) { throw (SpecificExceptionA) rootCause;        } else { throw e;        }    }}

它仅需扩展

RuntimeException
即可使用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号