Я считаю, что это анти-паттерн, которого, как правило, следует избегать. То, что 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(); %>