if (checkRequest(requestContext)) {
request = requestContext.getRequest();
response = requestContext.getResponse();
RequestHandlerContext ctx = internalHandlerMapping.getRequestHandler(request, response);
if (ctx == null) {
// ���������passthru filter�����ж�request�Ƿ�passthru��
// ������Ҫ��passthru��request��ִ��handleRequest����ֱ�ӷ��ء�
// �ù��������ڽ���webx������ͨ��filter����filter chain�Ľ������IJ��ֽ���ʹ��webx���ṩ��request contexts��
boolean requestProcessed = false;
if (passthruFilter == null || !passthruFilter.matches(request)) {
requestProcessed = handleRequest(requestContext);
}
if (!requestProcessed) {
giveUpControl(requestContext, chain);
}
} else {
ctx.getRequestHandler().handleRequest(ctx);
}
}
} catch (Throwable e) {
// �����쳣e�Ĺ��̣�
//
// 1. ���ȵ���errorHandler�����쳣e��errorHandler�������ѺõĴ���ҳ�档
// errorHandlerҲ�����¼��־ �� �����Ҫ�Ļ���
// 2. Handler����ֱ�Ӱ��쳣����������servlet engine�ͻ�ӹ�����쳣��ͨ������ʾweb.xml��ָ���Ĵ���ҳ�档
// ��������£�errorHandler����Ҫ�����¼��־��
// 3. ���粻��errorHandler���������쳣����servlet engine�ͻ�ӹ�����쳣��ͨ������ʾweb.xml��ָ���Ĵ���ҳ�档
// ��������£������쳣���ᱻ��¼����־�С�
try {
try {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (Exception ee) {
// ignore this exception
}
clearBuffer(requestContext, response);
// ȡ�ò�ִ��errorHandler
RequestHandlerContext ctx = internalHandlerMapping.getRequestHandler(request, response, e);
assertNotNull(ctx, "Could not get exception handler for exception: %s", e);
// ��¼��־
ctx.getLogger().error("Error occurred while process request " + request.getRequestURI(), e);
try {
// ����error������̣�����componentΪ�����root component��
WebxUtil.setCurrentComponent(request, components.getComponent(null));
ctx.getRequestHandler().handleRequest(ctx);
} finally {
WebxUtil.setCurrentComponent(request, null);
}
} catch (Throwable ee) {
// �����������