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");
    
    }
  • 相关阅读:
    msql 触发器
    微信模板消息推送
    微信朋友朋友圈自定义分享内容
    微信退款
    异步调起微信支付
    微信支付
    第一次作业
    【Linus安装MongoDB及Navicat】
    【前端】ES6总结
    【开发工具】Pycharm使用
  • 原文地址:https://www.cnblogs.com/orientsun/p/2610413.html
Copyright © 2011-2022 走看看