zoukankan      html  css  js  c++  java
  • 【KMS】Cannot forward a response that is already committed

    问题的根本原因由于响应本次请求的Response对象的状态是已提交状态造成的它不允许响应提交多次。

    什么时候Response对象的状态变成已提交状态:当你的应用已经实现了页面跳转逻辑。

    通常原因:

    1如果你使用了community的话,community的安全认证和授权如果没有通过,community内部会进行页面跳转

    但你的应用(对于workshop应用的话,指的是action)又试图进行页面跳转,就会出现这样的问题。

        /**
         * @jpf:action
         * @jpf:forward name="page" path="page.jsp"
         */
    protected Forward actionMethod()
    {
    
      //如果已经提交了响应,你仍然试图再次进行页面跳转,即再次提交响应,可能出现问题
      //通常可以加一个判断
           if (!getResponse().isCommitted()) {
                return new Forward("success");
            } else {
                return null;
            }
     }
    
    protected void beforeAction() 
    {
           SecurityManager.checkAuthorization(getRequest(),getResponse(), config.getString(CDConstants.CREATE_TERM_ACTION_NAME, ""));
          //这个调用可能实现了页面跳转,即提交响应
    }

    注意JSP中实现页面跳转后,加return 语句防止继续提交响应:

    2. .如果没有使用community的话,下面情景也会出现这个问题

        /**
         * @jpf:action
         * @jpf:forward name="page" path="page.jsp"
         */
    protected Forward actionMethod()
    {
          //直接操作Response对象写响应
          getResponse().getPrintWriter().println();
          …
          // 又执行的页面跳转,也可能出现问题
            return new Forward("index");
    
    }
  • 相关阅读:
    我败在了盲目和没有计划
    跟我一起学.NetCore目录
    跟我一起学.NetCore之依赖注入作用域和对象释放
    跟我一起学.NetCore之Asp.NetCore启动流程浅析
    std::unordered_map
    Android apps for “armeabi-v7a” and “x86” architecture: SoC vs. Processor vs. ABI
    android studio 配置相关问题
    shell script
    vscode配置
    linux常用命令笔记
  • 原文地址:https://www.cnblogs.com/orientsun/p/2610413.html
Copyright © 2011-2022 走看看