【问题标题】:How to stop further request execution from inside a taglib?如何从 taglib 内部停止进一步的请求执行?
【发布时间】:2009-12-14 07:05:01
【问题描述】:

基本上,我们想创建一个标签库,可以将请求执行转发到另一个页面,类似于<jsp:forward />。我们如何防止 JSP 页面的其余部分从 taglib 中执行?

【问题讨论】:

  • 解释更多。现在还不清楚。

标签: jsp jakarta-ee jsp-tags taglib


【解决方案1】:

您不应该在 taglib 中这样做。而是在ServletFilter 中执行此操作,然后再将任何位发送到响应。否则你可能会陷入IllegalStateException: response already committed的麻烦。

【讨论】:

    【解决方案2】:

    对我来说,以下几行效果很好:

    String url = "http://google.com";
    
    response.reset();
    response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
    response.setHeader("Location", url);
    response.getWriter().close();
    response.getWriter().flush();
    

    【讨论】:

      【解决方案3】:

      如果您不想在将控制权交给另一个页面后继续处理原始页面,最好使用重定向而不是转发。

      response.sendRedirect("foo.jsp");
      

      这将重定向到新页面并停止处理旧页面。

      但是 - 仅当您尚未向响应正文写入任何内容(即未将任何数据发送回客户端)时,重定向才可用。

      【讨论】:

      • 这不会停止旧 jsp 页面的执行。请使用 System.out.println("After sendRedirect"); 进行验证
      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多