加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

技术:Lotus解决“Invalid POST Request Exception”

(2009-09-14 17:01:29)
标签:

杂谈

分类: 技术

用户需要使用很多的动态性能,往往是通过大量的临时域存放HTML。有的时候,为了解决大字符串的存储问题,而使用多个拆分域。这样做的缺点,是当数据量不大的时候,无用的数据会增大POST的长度。
该问题出现时,往往对表单提交后无法保存,在控制台输出“Web Server: Invalid POST Request Exception”。显然服务器将接收到的POST数据过滤,没有到达实际的应用层,因此正常需要运行的代理没有有效运行。
关于POST长度的配置在服务器配置文档,“Internet协议”下的“Domino Web引擎”中的“POST数据”节(说明中参数单位为KB,实际上是以字节为单位)。在HTTP选项卡启用记录后,跟踪错误源获得详细错误的数据发现HTTP响应代码为500。当POST长度为30000时,使用TamperIE获取原始的POST数据,发现大小为32700大于该限制继而发生错误。一个可行的方法是将该POST数据扩大。POST数据不能无限放大,如果POST大数据会影响高峰时期的服务器性能、增加系统开销与网络负荷。
除了扩大该参数上限外,我们还可以进一步分析POST数据剔除一些与最终存储文档无关的数据,从而压缩POST字节大小。POST数据是根据HTML中的DOM控件与数据产生的。在DOM中动态地删除无用的控件,将会减少POST数据大小。
在将所有需要保存的数据经过处理后,将无用的数据开始进行动态删除,然后再提交表单。
西祠登陆用户可以登陆讨论版讨论并下载相关资源


示例:
使用DOM方法动态创建表格及输入控件,多行输入控件按“控件名_行号”标记。在提交表单前,将该数据通过分隔符放在多值域中。在后台WebQuery Save代理中处理为数组保存。保存的数据前台展现通过使用多个域存放HTML(编辑与浏览两种模式),该数据通过代理输出不需要保存。
在提交表单后的保存操作中,可以将动态绘制的临时输入框与前台展现的临时域动态删除,大文本拆分的串没有数据也可以删除,从而缩减POST数据大小。实验结果减少约15KB数据。
var MonthlyTargetInputId=new Array(10);
MonthlyTargetInputId[0]="MonthlyTargetContent";         //项目内容
MonthlyTargetInputId[1]="MonthlyTargetEvaluateWeightItem";  //考核权重
MonthlyTargetInputId[2]="MonthlyTargetAdjustWeightItem";    //调整权重
MonthlyTargetInputId[3]="MonthlyTargetPerformance";         //时间、质量目标
MonthlyTargetInputId[4]="MonthlyTargetProgressStatus";      //完成情况
MonthlyTargetInputId[5]="MonthlyTargetSelfMark";            //自评分
MonthlyTargetInputId[6]="MonthlyTargetDepartAdjust";        //部门调整
MonthlyTargetInputId[7]="MonthlyTargetFirstAudit";         //绩效初核
MonthlyTargetInputId[8]="MonthlyTargetPrincipalAudit";      //分管初核
MonthlyTargetInputId[9]="MonthlyTargetCheck";             //复核分

var MonthlyKeyTargetInputId=new Array(10);
MonthlyKeyTargetInputId[0]="MonthlyKeyTargetContent";         //项目内容
MonthlyKeyTargetInputId[1]="MonthlyKeyTargetWeightItem";      //考核权重
MonthlyKeyTargetInputId[2]="MonthlyKeyTargetBasicPoint";      //基本指标
MonthlyKeyTargetInputId[3]="MonthlyKeyTargetFightPoint";      //挑战指标
MonthlyKeyTargetInputId[4]="MonthlyKeyTargetMethod";      //计分办法
MonthlyKeyTargetInputId[5]="MonthlyKeyTargetProgressStatus";  //完成情况
//MonthlyKeyTargetInputId[6]="MonthlyKeyTargetSelfMark";    //自评分
MonthlyKeyTargetInputId[6]="MonthlyKeyTargetDepartAdjust";  //系统导入(数据运用)
MonthlyKeyTargetInputId[7]="MonthlyKeyTargetFirstAudit";      //绩效初核
MonthlyKeyTargetInputId[8]="MonthlyKeyTargetPrincipalAudit";  //分管初核
MonthlyKeyTargetInputId[9]="MonthlyKeyTargetCheck";           //复核分

var MonthlyBasisManageInputId=new Array(9);
MonthlyBasisManageInputId[0]="MonthlyBasisManageContent";
MonthlyBasisManageInputId[1]="MonthlyBasisManageType";
MonthlyBasisManageInputId[2]="MonthlyBasisManageMethod";
MonthlyBasisManageInputId[3]="MonthlyBasisManageProgressStatus";
MonthlyBasisManageInputId[4]="MonthlyBasisManageSelfMark";
MonthlyBasisManageInputId[5]="MonthlyBasisManageDepartAdjust";
MonthlyBasisManageInputId[6]="MonthlyBasisManageFirstAudit";
MonthlyBasisManageInputId[7]="MonthlyBasisManagePrincipalAudit";
MonthlyBasisManageInputId[8]="MonthlyBasisManageCheck";

var OtherInputId=new Array(9);
OtherInputId[0]="OtherContent";
OtherInputId[1]="OtherWeightItem";
OtherInputId[2]="OtherMethod";
OtherInputId[3]="OtherProgressStatus";
OtherInputId[4]="OtherSelfMark";
OtherInputId[5]="OtherDepartAdjust";
OtherInputId[6]="OtherFirstAudit";
OtherInputId[7]="OtherPrincipalAudit";
OtherInputId[8]="OtherCheck";
//初始化数据
function initData()
{
   //月度工作目标
   setGroupValue('MonthlyTargetCount',10,MonthlyTargetInputId);
   setGroupValue('MonthlyKeyTargetCount',10,MonthlyKeyTargetInputId);
   setGroupValue('MonthlyBasisManageCount',9,MonthlyBasisManageInputId);
   setGroupValue('OtherCount',9,OtherInputId);
}

function destroyData()
{
   removeModule("MonthlyTargetCount",10,MonthlyTargetInputId);
   removeModule("MonthlyKeyTargetCount",10,MonthlyKeyTargetInputId);
   removeModule("MonthlyBasisManageCount",9,MonthlyBasisManageInputId);
   removeModule("OtherCount",9,OtherInputId);
   removeSplit("MonthlyKeyTargetMethodSplit",60);
   removeSplit("MonthlyBasisManageMethodSplit",60);
   removeSplit("OtherMethodSplit",60);
   removeSplit("MonthlyTargetPerformanceSplit",60);

   removeModuleUI("MonthlyTarget",50);
   removeModuleUI("MonthlyKeyTarget",50);
   removeModuleUI("MonthlyBasisManage",50);
   removeModuleUI("Other",50);
}
在表单的onSubmit事件中添加代码:
initData();
destroyData();
return true;
相关DOM的函数放入一个JS头文件,关于该头文件的其他函数详见前期技术版块发布的文章:
function setGroupValue(objCount,columnCount,arrayOfInputId)
{
   var _objCount=null;
   var Count=0;
   var Separator="@@##@@";//数据分隔符
   var href=location.href;
   var maxLength=256;//限制大小
   href=href.toLowerCase();
   if(href.indexOf("opendocument")>=0)
   {
      //编辑模式不进行该运算
      return ;
   }
   if(typeof(objCount)=="string")
   {
      _objCount=document.getElementByIdx(objCount)||document.all(objCount);
   }
   else _objCount=objCount;
   if(_objCount==null) return;    
   Count=parseInt(_objCount.value);
   if(isNaN(Count)||Count<=0) return;
   var ColumnIndex;
   var Index;
   var values=new Array(columnCount);
   for(ColumnIndex=1;ColumnIndex<=columnCount;ColumnIndex++)
       values[ColumnIndex-1]="";
   for(Index=1;Index<=Count;Index++)
   {
      for(ColumnIndex=1;ColumnIndex<=columnCount;ColumnIndex++)
      {
         if(arrayOfInputId!=null&&arrayOfInputId.length>=ColumnIndex)
           {
                var _id=arrayOfInputId[ColumnIndex-1];
                if(_id==null||_id==""||_id=="undefined"||_id=="null")
              {
                 ;
              }
              else
             {
                 var _obj=document.getElementByIdx(_id+"_"+Index.toString())||document.all(_id+"_"+Index.toString());
                 if(_obj)
                 {
                     if(Index==1)
                     {
                         if(_obj.value==null||_obj.value=="")
                               values[ColumnIndex-1]="";
                         else
                                                             values[ColumnIndex-1]=_obj.value.replace(/\r\n/ig,"<BR>");
                         }
                     }
                     else 
                    
                       if(_obj.value==null||_obj.value=="")
                          values[ColumnIndex-1]=values[ColumnIndex-1]+Separator+"";
                       else
                        values[ColumnIndex-1]=values[ColumnIndex-1]+Separator+_obj.value.replace(/\r\n/ig,"<BR>");
                          //_obj.value="";
                        }
                      }
                 }
                 else
                 {
                     if(Index==1) values[ColumnIndex-1]="";
                     else         values[ColumnIndex-1]=values[ColumnIndex-1]+Separator+"";     
                 }
             }
         }
     }
   }

   for(ColumnIndex=1;ColumnIndex<=columnCount;ColumnIndex++)
   {
         if(arrayOfInputId!=null&&
            arrayOfInputId.length>=ColumnIndex)
            {
                var _id=arrayOfInputId[ColumnIndex-1];
                if(_id==null||_id==""||_id=="undefined"||_id=="null")
               {
                 ;
               }
               else
              {
                 var _obj=document.getElementByIdx(_id)||document.all(_id);
                 //values[ColumnIndex-1]=values[ColumnIndex-1].replace(/\s/ig,"");
                 if(_id.indexOf("Method")>=0)
                 {
                     //maxLength
                     var SplitCount=0;
                     var SplitMod=0;
                     var SplitText="";
                     var length=values[ColumnIndex-1].length;
                     var FieldPrefix=_id;
                     var FieldCountItem=_id+"Count";
                     var SplitIndex=0;
                     SplitMod=length%maxLength;
                     if(SplitMod==0)
                     {
                         SplitCount=length/maxLength;
                     }
                     else
                     {
                        SplitCount=((length-SplitMod)/maxLength)+1;
                     }

                     var objSplitFieldCount=document.getElementByIdx(FieldCountItem)||document.all(FieldCountItem);
                     if(objSplitFieldCount) objSplitFieldCount.value=SplitCount.toString();
                     if(SplitCount==1)
                     {
                       if(_obj) _obj.value=values[ColumnIndex-1];
                      }
                      else
                      {
                           var StartIndex=0;
                           for(SplitIndex=1;SplitIndex<=SplitCount;SplitIndex++,StartIndex+=maxLength)
                           {
                               SplitText=values[ColumnIndex-1].substr(StartIndex,maxLength);
                               var objSplitField=null;
                               if(SplitIndex==1)
                               {
                                   objSplitField=_obj;
                               }
                               else
                                  objSplitField=document.getElementByIdx(FieldPrefix+"Split_"+(SplitIndex-1).toString())||document.all(FieldPrefix+"Split_"+(SplitIndex-1).toString());
                               if(objSplitField)
                               {objSplitField.value=SplitText; }
                           }
                      }

                 }
                 else
                 {
                     if(_obj) _obj.value=values[ColumnIndex-1];
                 }
                 //alert(values[ColumnIndex-1]);
              }
         }
   
}

function removeModule(objCount, columnCount, arrayOfInputId)
{
        var _objCount = null;
        var objParent=null;
        var Count = 0;
        var href = location.href;
        href = href.toLowerCase();
        if (href.indexOf("opendocument") >= 0) {
            //编辑模式不进行该运算
            return;
        }
        if (typeof(objCount) == "string") {
            _objCount = document.getElementByIdx(objCount) || document.all(objCount);
        } else _objCount = objCount;
        if (_objCount == null) return;
        if (!_objCount.value || _objCount.value == "") return;
        Count = parseInt(_objCount.value);
        if (isNaN(Count) || Count <= 0) return;

        var ColumnIndex;
        var Index;
        for (Index = 1; Index <= Count; Index++) {
            for (ColumnIndex = 1; ColumnIndex <= columnCount; ColumnIndex++) {
                if (arrayOfInputId != null && arrayOfInputId.length >= ColumnIndex) {
                    var _id = arrayOfInputId[ColumnIndex - 1];
                    if (_id == null || _id == "" || _id == "undefined" || _id == "null") {;
                    } else {
                        var _obj = document.getElementByIdx(_id + "_" + Index.toString()) || document.all(_id + "_" + Index.toString());
                        if (_obj) {
                            objParent=_obj.parentNode;
                            if(!objParent) objParent=document.body;
                            objParent.removeChild(_obj);
                        }
                    }
                }
            }
        }
}



function removeSplit(FieldName,Count)
{
  var objField=document.all(FieldName)||document.getElementByIdx(FieldName);
  var objParent=null;
  if(objField)
  {
        if(!objField.value||objField.value.replace(/ /ig,"")=="")
        {
           objParent=objField.parentNode;
           if(!objParent) objParent=document.body;
           objParent.removeChild(objField);
        }
  }
  for(var index=1;index<=Count;index++)
  {
      objField=document.all(FieldName+"_"+index.toString())||document.getElementByIdx(FieldName+"_"+index.toString());
      if(objField)
      {
        if(!objField.value||objField.value.replace(/ /ig,"")=="")
        {
           objParent=objField.parentNode;
           if(!objParent) objParent=document.body;
           objParent.removeChild(objField);
        }
      }
  }
}


function removeModuleUI(ModuleName,Count)
{
   var objEdit=null;
   var objBrowse=null;
   var objParent=null;
   var EditName="";
   var BrowseName="";
   EditName=ModuleName+"Edit";
   BrowseName=ModuleName+"Browse";
   objEdit=document.all(EditName)||document.getElementByIdx(EditName);
   objBrowse=document.all(BrowseName)||document.getElementByIdx(BrowseName);
   if(objEdit)
   {
       objParent=objEdit.parentNode;
       if(!objParent) objParent=document.body;
       objParent.removeChild(objEdit);
   }
   if(objBrowse)
   {
       objParent=objBrowse.parentNode;
       if(!objParent) objParent=document.body;
       objParent.removeChild(objBrowse);
   }

   for(var index=1;index<=Count;index++)
   {
    EditName=ModuleName+"Edit_"+index.toString();
       BrowseName=ModuleName+"Browse_"+index.toString();
       objEdit=document.all(EditName)||document.getElementByIdx(EditName);
       objBrowse=document.all(BrowseName)||document.getElementByIdx(BrowseName);
      if(objEdit)
       {
           objParent=objEdit.parentNode;
           if(!objParent) objParent=document.body;
           objParent.removeChild(objEdit);
       }
       if(objBrowse)
       {
           objParent=objBrowse.parentNode;
           if(!objParent) objParent=document.body;
           objParent.removeChild(objBrowse);
       }
   }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有