logo
Хабибуллин

Обработка исключений в пользовательских тегах

Ранее уже говорилось о том, что обработку исключения, возникшего на странице JSP, можно перенести на другую страницу, указанную атрибутом errorPage тега <%@ page %>. В пользовательских тегах можно облегчить обработку исключения, реализовав интер-

фейс TryCatchFinally.

Интерфейс TryCatchFinally описывает всего два метода:

public void doCatch(Throwable thr); public void doFinally();

Метод doCatch() вызывается автоматически контейнером при возникновении исключе-

ния в одном из методов doStartTag(), doInitBody(), doAfterTag(), doEndTag() обработчика,

реализующего интерфейс TryCatchFinally. Методу doCatch() передается созданный объ- ект-исключение. Метод doCatch() сам может выбросить исключение.

Метод doFinally() выполняется во всех случаях после метода doEndTag(). Он уже не может выбрасывать исключения.

Например, при реализации тега <sdo:connection> допускается использование методов интерфейса TryCatchFinally для отката транзакции следующим образом:

public class ConnectionTag extends TagSupport implements TryCatchFinally{

private Connection conn;

// Прочие поля и методы класса

public void doCatch(Throwable t) throws Throwable{ conn.rollback();

throw t;

}

public void doFinally(){ conn.close();

}

}