0
感谢大家 -到Response.End获得()行为提前
我知道关闭的JspWriter/OutputStream中和返回的方法停止在主要方面进一步执行。有没有人找到一种方法来停止在主要环境之外的执行?从我的JSP是“编”的理解等等,我不认为这是可能的,但我想我应该看到,如果任何人有任何聪明的解决方法 -
感谢,
山姆
感谢大家 -到Response.End获得()行为提前
我知道关闭的JspWriter/OutputStream中和返回的方法停止在主要方面进一步执行。有没有人找到一种方法来停止在主要环境之外的执行?从我的JSP是“编”的理解等等,我不认为这是可能的,但我想我应该看到,如果任何人有任何聪明的解决方法 -
感谢,
山姆
我认为这成为通常应该避免的反模式。仅仅因为ASP.NET让你这样做并不意味着它是一个很好的功能。这就是说,你可以通过实现一个servlet请求过滤器来模拟行为。您需要在您的web.xml
中配置此过滤器,以过滤由JSPServlet
和您想要中止的其他servlet处理的任何请求。
为此,任何异常处理代码都需要忽略或重新抛出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(); %>