• javascript与服务器3


    一,  带参数的XMLHTTP请求
    1, 进行get请求
        get请求最常见的是在浏览器地址栏中输入URL并打开页面时,这就是向服务器发送一个get请求. 它的限制是URL最大长度不能超过2048字符(2KB)
      例如:
         var oRequest = CreateXMLHttpRequest(); //利用上篇创建的方法获得一个XMLHTTP对象
         var url = "http://www.cnblogs.com/article?id=1001&name="12345";
         oRequest.open("get",url,false);  // 同步发送一个带有参数的get请求
     为了能够更好的设置参数, 我们来创建一个函数
       function setURLParam(url,paramName,paramValue){
          url += (url.indexOf("?")==-1? "?": "&");
          url += encodeURIComponent(paramName)+ "=" +encodeURIComponent(paramValue);  --URL必须要编码,否则可能出错.
          return url
       }
     改写上面的例子通过get方式发送请求:
        var oRequest = CreateXMLHttpRequest(); 
        var url = "http://www.cnblogs.com/article";
        url = setURLParam(url,"id",1001);      //设置第一个参数
        url = setURLParam(url,"name","12345"); //设置第二个参数
        oRequest.open("get",url,false);
        oRequest.send(null);
     
    2, 进行post请求
        post请求常用于表单提交, 因为post请求可以比get请求发送的数据更多(约2GB). 另外post请求附加的参数不会添加到url上,所以必须通过send()方法添加参数.如:
       oRequest.send("name1=value1&name2=value2");
     所以我们也通过函数来添加参数.
     function addPostParam(sParams,sParamName,sParamValue){
       if(sParams.length>0)  //判断是否设置过参数
          sParams +="&";
       return sParams +encodeURIComponent(sParamName) + "="
                      + encodeURIComponent(sParamValue);
     }
     改写前面的例子通过post方式发送请求:
      var oRequest = CreateXMLHttpRequest(); 
        var url = "http://www.cnblogs.com/article";
        var sParams ="";
        sParams = addPostParam(sParams,"id",1001);      //设置第一个参数
        sParams = addPostParam(sParams,"name","12345"); //设置第二个参数
        oRequest.open("post",url,false);  //post请求
        oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //进行post请求必须要设置此项
        oRequest.send(sParams);   //请求的参数在这里设置
     
    二,  LiveConnect请求
        在客户端没有安装MSXML进行XMLHTTP请求时,还有另外一种请求方式,它是LiveConnect请求,是Netscape Navigator创建的请求方式,它是一种可以让javascript调用java类来实现客户端和服务器交互的方式. 使用这种请求客户端必须安装Java运行时环境(Java Runtime Environment,JRE), 同时浏览器还要启用Java才可以.既然能把这种方式拿出来讲, 一定有它特殊意义. 因为现代的浏览器(除IE外)都支持LiveConnect. 它允许访问Java提供的所有HTTP相关的库.
    1. 使用LiveConnect进行get请求
     本质上是通过调用Java中的HTTP类库来实现的.
      function httpGet(sURL){
        var sResponseText = "";
        var oURL = new java.net.URL(sURL); //通过URL实例化一个Java对象
        var oStream = oURL.openStream();   //打开一个输入流
        var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));  //创建缓冲阅读器
                        
        var sLine = oReader.readLine();  //逐行读取
        while (sLine != null) {
             sResponseText += sLine + "
    ";
             sLine = oReader.readLine();
        }
                        
        oReader.close();
        return sResponseText;   //返回服务器响应文本
     }
    使用:
    <html>
        <head>
            <title>LiveConnect Example</title>              
                    function getServerInfo() {
                            var sURL ="http://www.cnblogs.com/article/"
                            sURL = addURLParam(sURL,"id",1001);
                            sURL = addURLParam(sURL,"name","12345");
                            var sResponseText = httpGet(sURL);                    
                            alert("Response text is: " + sResponseText);
                    }
            </script>
        </head>
        <body>
            <input type="button" onclick="getServerInfo()" value="点击获取服务器信息" />
        </body>
    </html>
               
    2. 使用LiveConnect进行post请求   
     function httpPost(sURL, sParams) {
        var oURL = new java.net.URL(sURL);          //实例化Java请求对象
        var oConnection = oURL.openConnection();   //创建连接对象
                    
        oConnection.setDoInput(true);              //设置连接对象可以接收输入和输出
        oConnection.setDoOutput(true);
        oConnection.setUseCaches(false);            //连接不使用缓存数据    
        oConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  //添加http首部, 因为post必须此设置.              
                    
        var oOutput = new java.io.DataOutputStream(oConnection.getOutputStream());  //从连接对象中获取请求的输入流
        oOutput.writeBytes(sParams);   // 把参数写入到输入流中
        oOutput.flush();               //立刻发送请求
        oOutput.close();               //关闭输入流
                    
        var sLine = "", sResponseText = "";
                    
        var oInput = new java.io.DataInputStream(oConnection.getInputStream()); //从连接对象中获取输出流                              
        sLine = oInput.readLine();    //逐行读取输出流
                        
        while (sLine != null){                                
             sResponseText += sLine + "
    ";
             sLine = oInput.readLine();
        }
                                                      
       oInput.close();      //关闭输出流                            
                    
       return sResponseText;  //返回文本                        
    }
    使用:
    <html>
        <head>
            <title>LiveConnect Example</title>
            <script type="text/javascript">
             function getServerInfo() {
                var sURL ="http://www.cnblogs.com/article/";   //请求的URL
                var sParams = "";
                sParams = addPostParam(sParams, "id", 1001);      //添加第一个参数
                sParams = addPostParam(sParams, "name", "12345"); //添加第二个参数
                var sResponseText = httpPost(sURL , sParams);     //通过LiveConnect进行post请求
                alert("Response text is: " + sResponseText);
             }
            </script>
        </head>
        <body>
            <input type="button" onclick="getServerInfo()" value="Get Server info" />
        </body>
    </html>
     
    三, 构建一个智能的HTTP请求函数库.
         如果客户端不能进行XMLHTTP请求则进行LiveConnect请求,这就是所谓的智能HTTP请求. 我们封装在一个http.js里, 便于使用.
    // 判断客户端是否支持XMLHTTP请求
    var bXmlHttpSupport = (typeof XMLHttpRequest == "object" || window.ActiveXObject);
    //LiveConnect对象进行post请求
    function httpPost(sURL, sParams) {
                           
        var oURL = new java.net.URL(sURL);
        var oConnection = oURL.openConnection();
        oConnection.setDoInput(true);
        oConnection.setDoOutput(true);
        oConnection.setUseCaches(false);                
        oConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");                
        var oOutput = new java.io.DataOutputStream(oConnection.getOutputStream());
        oOutput.writeBytes(sParams);
        oOutput.flush();
        oOutput.close();
        var sLine = "", sResponseText = "";
        var oInput = new java.io.DataInputStream(oConnection.getInputStream());                                
        sLine = oInput.readLine();
        
        while (sLine != null){                                
            sResponseText += sLine + "
    ";
            sLine = oInput.readLine();
        }
                                      
        oInput.close();                                  
        return sResponseText;                         
    }
    //添加Post请求需要发送的参数
    function addPostParam(sParams, sParamName, sParamValue) {
        if (sParams.length > 0) {
            sParams += "&";
        }
        return sParams + encodeURIComponent(sParamName) + "=" 
                       + encodeURIComponent(sParamValue);
    }
    //添加get请求需要发送的参数
    function addURLParam(sURL, sParamName, sParamValue) {
        sURL += (sURL.indexOf("?") == -1 ? "?" : "&");
        sURL += encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
        return sURL;   
    }
    //LiveConnect对象get请求
    function httpGet(sURL) {
        var sResponseText = "";
        var oURL = new java.net.URL(sURL);
        var oStream = oURL.openStream();
        var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));
        
        var sLine = oReader.readLine();
        while (sLine != null) {
            sResponseText += sLine + "
    ";
            sLine = oReader.readLine();
        }
        
        oReader.close();
        return sResponseText;
    }
    // 创建统一的的XMLHTTP请求对象 
    if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject) {
        function XMLHttpRequest() {
            var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
                                 "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                                 "Microsoft.XMLHTTP"];
                             
            for (var i=0; i < arrSignatures.length; i++) {
                try {
            
                    var oRequest = new ActiveXObject(arrSignatures);
                
                    return oRequest;
            
                } catch (oError) {
                    //ignore
                }
            }          
            throw new Error("MSXML is not installed on your system.");               
        }
    }
    //进行智能请求
    var Http = new Object;
    Http.get = function (sURL, fnCallback) {
     
        if (bXmlHttpSupport) {
       
            var oRequest = new XMLHttpRequest();
            oRequest.open("get", sURL, true);
            oRequest.onreadystatechange = function () {
                if (oRequest.readyState == 4) {
                    fnCallback(oRequest.responseText);
                }
            }
            oRequest.send(null);    
        
        } else if (navigator.javaEnabled() && typeof java != "undefined" 
                && typeof java.net != "undefined") {
                
            setTimeout(function () {
                fnCallback(httpGet(sURL));
            }, 10);
        } else {
            alert("Your browser doesn't support HTTP requests.");
        }          
    };
    Http.post = function (sURL, sParams, fnCallback) {
     
        if (bXmlHttpSupport) {
       
            var oRequest = new XMLHttpRequest();
            oRequest.open("post", sURL, true);
            oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            oRequest.onreadystatechange = function () {
                if (oRequest.readyState == 4) {
                    fnCallback(oRequest.responseText);
                }
            }
            oRequest.send(sParams);    
        
        } else if (navigator.javaEnabled() && typeof java != "undefined" 
                && typeof java.net != "undefined") {
                
            setTimeout(function () {
                fnCallback(httpPost(sURL, sParams));
            }, 10);
        } else {
            alert("Your browser doesn't support HTTP requests.");
        }          
    };
  • 相关阅读:
    JDBC提高mysql入库的效率!
    Java域名解析,类似nslookup
    request.getReader()的怪异事件
    程序一部署上就占了tomcat的2G内存
    nginx简介及简单使用
    ubuntu安装hadoop(伪分布)
    .Net Famework 和 Library的源码下载
    将switch case转为条件驱动
    Asp.net 和 Comet 开发入门, 第一个例子
    HTML, CSS和Javascript调试入门
  • 原文地址:https://www.cnblogs.com/shaoshao/p/3384846.html
Copyright © 2020-2023  润新知