Получение поведения Response.End () в JSP - PullRequest
0 голосов
/ 03 августа 2009

Спасибо всем заранее -

Мне известно о закрытии jspwriter / outputtream и возвращении в качестве метода, чтобы остановить дальнейшее выполнение в главном контексте. Кто-нибудь нашел способ остановить выполнение вне основного контекста? Из моего понимания того, как jsp «компилируется» и т. Д., Я не думаю, что это возможно, но я подумал, что должен посмотреть, есть ли у кого-нибудь умные решения -

Спасибо

Sam

1 Ответ

0 голосов
/ 23 марта 2010

Я считаю, что это анти-паттерн, которого, как правило, следует избегать. То, что ASP.NET позволяет вам это делать, не означает, что это хорошая функция. При этом вы можете смоделировать поведение, внедрив фильтр запросов сервлета. Вам необходимо настроить этот фильтр в вашем web.xml для фильтрации любых запросов, обработанных JSPServlet и другими сервлетами, которые вы хотите прервать.

Чтобы это работало, любой код обработки исключений, который у вас есть, необходимо игнорировать или перебрасывать ServletRequestAbortException.

public class CancellableRequestFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        try {
            chain.doFilter(request, response);
        } catch (ServletRequestAbortException e) {
            //TODO: Maybe flush/close response here.
        }
    }

    public static void endRequest() {
        throw new ServletRequestAbortException();
    }

    public static class ServletRequestAbortException extends RuntimeException {
    }
}

Пример вызова из JSP:

<% com.your.pkg.CancellableRequestFilter.endRequest(); %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...