Java EAR应用程序中的JBOSS EAP 7.1中的Ajax请求失败

时间:2018-02-20 11:38:29

标签: ajax java-ee-6 jboss-eap-7

我在JBOSS EAP 6.3中运行良好的EAR应用程序。当我在EAP 7中运行此应用程序时,几次调用后ajax调用响应为空。主要是jsp页面使用ajax调用servlet。我使用通用代码片段进行AJAX调用。我可以在第3/4次正确得到答复。之后它无法正常工作。整个过程在EAP 6.3中运行良好。

ajax代码段如下:

null
  

// dataStore是键/值对的数组。

AND clause(  and ID_Employees_CODE not in)
    try{
                objXMLHTTP = new XMLHttpRequest();
            }catch(e){
                try {
                    objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP.3.0");     
                }
                catch(e){
                    try {
                        objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");     
                    }
                    catch(e)    {
                        try {
                            objXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");     
                        }
                        catch(e)    {
                            alert("XMLHTTP Not Supported On Your Browser");
                            return;
                        }   
                    }
                }
            }
            var urlstr = "" ;
            var key = "";
            var j = 0;
            for(key in dataStore){
                if(j == 0)  {
                    urlstr += key + "=" + dataStore[key];
                    j = 1;
                }   else    {
                    urlstr += "&" + key + "=" + dataStore[key];
                }
            }
            var _dateTime = new Date().getTime();
            urlstr += "&CALLTIME=" + _dateTime + "-";
            var requNumber = "?requNumber=" + _dateTime;
            // http request has been changed as Parameterised
            var _AsyncRequest = true;
            try{
                if(_httpMode == "undefined")
                    _httpMode = "0";
            }catch(e){
                _httpMode = "0";
            }
            if((_httpMode != "undefined") && (_httpMode != null) && (_httpMode == "1"))
            {
                _AsyncRequest = false;
            }
            if(!document.all)
            {
                _AsyncRequest = false;
            }

            if(urlstr.length<=1000) {
                objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber + "&" + urlstr,false);
            }   else    {
                objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber,false);   
            }

            urlstr = URLEncode(urlstr); 
            objXMLHTTP.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;
  

//连续请求后此条件失败

             //The following is not working after few calls
  

//代码

            if(urlstr.length<=1000) {
                objXMLHTTP.send("");
            }   else    {   
                objXMLHTTP.send(urlstr);
            }  


                rtnXML = objXMLHTTP.responseText;

          if (objXMLHTTP.statusText == "OK" )
            { 
             }

1 个答案:

答案 0 :(得分:0)

这是因为网址帖子请求中存在字符 | ,并且没有编码长度小于1000的字符串。只需使用

  

urlstr = URLEncode(urlstr);

if / else 连接条件打开之前

代码段如下:

    urlstr = URLEncode(urlstr);
        if(urlstr.length<=1000) {
            objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber + "&" + urlstr,false);
        }   else    {
            objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber,false);   
        }
objXMLHTTP.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;
if(urlstr.length<=1000) {
            objXMLHTTP.send("");
        }   else    {   
            objXMLHTTP.send(urlstr);
        }  
rtnXML = objXMLHTTP.responseText;

URLEncode 函数定义如下:

function URLEncode(urlstr ){
    var SAFECHARS = "0123456789" +  "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +  "abcdefghijklmnopqrstuvwxyz" + "-_.!~*'()=?&";
    var HEX = "0123456789ABCDEF";
    var plaintext = urlstr;
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
        var ch = plaintext.charAt(i);
        if (ch == " "){
            encoded += "+";             
        }else if (SAFECHARS.indexOf(ch) != -1) {
            encoded += ch;
        }else {
            var charCode = ch.charCodeAt(0);
            if (charCode > 255) {
                encoded += "+";
            }else {
                encoded += "%";
                encoded += HEX.charAt((charCode >> 4) & 0xF);
                encoded += HEX.charAt(charCode & 0xF);
            }
        }
    }
    return encoded;
}