Apache Commons входит в JSP - PullRequest
       9

Apache Commons входит в JSP

0 голосов
/ 26 января 2012

Я прочитал много разных статей / тем по этому вопросу, но пока не определился, как лучше всего выполнять регистрацию Apache Commons в моей JSP.

Чтобы обеспечить некоторый контекст, я добавляю улучшенную логику ошибок в приложение, которое изначально разрабатывалось с использованием Spring 2. Итак, теперь у нас есть контроллеры, созданные с использованием Spring 2 и Spring 3.

Таким образом, вместо использования обработки исключений в Spring MVC 3 на уровне контроллера, я думаю, что было бы лучше настроить JSP в файле web.xml, который бы регистрировал все распространенные исключения для всех контроллеров.

Удивительно, но я не вижу простого способа ведения журнала в JSP с использованием библиотек тегов. В Apache Commons, похоже, имеется устаревшая библиотека тегов для ведения журналов, но она основана на log4j, а не на самом Apache Commons Logging.

Итак, вместо этого я выполняю следующее программно в моем JSP:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="org.apache.commons.logging.Log" %>
<%@ page import="org.apache.commons.logging.LogFactory" %>
<%@ page isErrorPage="true" %>
<% Log logger = LogFactory.getLog(this.getClass()); %>
<html>
<head>
</head>
<body>
    <% 
        StringBuilder stringBuilder = new StringBuilder("\n" + exception); 
        for(StackTraceElement element : exception.getStackTrace())
        {
            stringBuilder.append("\n" + element.toString());
        }
        logger.error("Unhandled exception caught: " + stringBuilder.toString()); 
    %>
    <p>Text here</p>
</body>
</html>

Итак, мой вопрос заключается в следующем ... есть ли лучший способ выполнить это ведение журнала? Вышеописанное работает, но кажется излишне неловким из-за того, что должно быть обычной задачей

1 Ответ

1 голос
/ 26 января 2012

Помещать сырой код Java в файл JSP действительно неудобно.Что касается вашего конкретного функционального требования,

регистрирует все распространенные исключения для всех контроллеров

. Обычная практика - использовать Filter для того, что отображается на /*.

Например,

@WebFilter("/*")
public class ExceptionFilter implements Filter {

    private Log logger = LogFactory.getLog(getClass());

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        try {
            chain.doFilter(request, response);
        } catch (ServletException e) {
            logger.error("Unhandled exception caught", e);
            throw e;
        }
    }

    // ...
}

Обратите внимание, что вам не нужно создавать трассировку стека самостоятельно.Регистратор уже делает это, если вы передаете исключение в качестве второго аргумента.Тем не менее, вы могли бы использовать для этого Throwable#printStackTrace(PrintWriter).

...