2009-08-03 20 views
0

感谢大家 -到Response.End获得()行为提前

我知道关闭的JspWriter/OutputStream中和返回的方法停止在主要方面进一步执行。有没有人找到一种方法来停止在主要环境之外的执行?从我的JSP是“编”的理解等等,我不认为这是可能的,但我想我应该看到,如果任何人有任何聪明的解决方法 -

感谢,

山姆

回答

0

我认为这成为通常应该避免的反模式。仅仅因为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(); %>