提前感谢所有人 -
我知道关闭jspwriter / outputstream并返回作为停止在主上下文中进一步执行的方法。有没有人找到一种方法来阻止主要上下文之外的执行?根据我对jsp如何“编译”等的理解我不认为这是可能的,但我想我应该看看是否有人有任何聪明的解决方案 -
谢谢,
萨姆
答案 0 :(得分: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(); %>