zoukankan      html  css  js  c++  java
  • XMLHTTPRequest的理解 及 SpringMvc请求和响应xml数据

    HTTP请求报文三个部分组成
      POST /search HTTP/1.1        //→请求行(request line)、
      Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
      application/msword, application/x-silverlight, application/x-shockwave-flash, */*
      Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
      Accept-Language: zh-cn
      Accept-Encoding: gzip, deflate     //↑↓请求头部(header)
      User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
      Host: <a href="http://www.google.cn">www.google.cn</a>
      Connection: Keep-Alive
      Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
      NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
      FxlRugatx63JLv7CWMD6UB_O_r

      hl=zh-CN&source=hp&q=domety      //→请求数据(参数)(request-body)
      //可以看到,POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分

    HTTP响应报文也由三个部分组成,分别是:状态行、消息报头、响应正文。
      下面给出一个HTTP响应报文例子
      HTTP/1.1 200 OK              //→status-line状态行
      Date: Sat, 31 Dec 2005 23:59:59 GMT
      Content-Type: text/html;charset=ISO-8859-1 //↑↓headers消息响应报头
      Content-Length: 122

      <html>                  //→response-body响应正文
        <head>
        <title>Wrox Homepage</title>
        </head>
        <body>
        <!-- body goes here -->
        </body>
      </html>
      常见状态代码、状态描述的说明如下。
      200 OK:客户端请求成功。
      400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
      401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
      403 Forbidden:服务器收到请求,但是拒绝提供服务。
      404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
      500 Internal Server Error:服务器发生不可预期的错误。
      503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

    ajax技术的核心是XMLHttpRequest对象

    ajax通过原生的XMLHttpRequest对象发出HTTP请求,得到服务器返回的数据后,再进行处理
    创建同步请求
      //message.xml格式数据
      <p>hello world</p>

      <button id="btn">获取信息</button>
      <div id="result"></div>
      <script>
      btn.onclick = function(){
        //创建xhr对象
        var xhr;
        if(window.XMLHttpRequest){
          xhr = new XMLHttpRequest();
        }else{
          xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        //发送请求
        xhr.open('get','/uploads/rs/26/ddzmgynp/message.xml',false);//默认true异步响应,
        xhr.send();//请求参数
        //同步接受响应
        if(xhr.readyState == 4){//4代表完成响应
          if(xhr.status == 200){
          //实际操作
          result.innerHTML += xhr.responseText;
          }
        }
      }
    </script>
    创建异步请求
      <button id="btn">获取信息</button>
      <div id="result"></div>
      <script>
      btn.onclick = function(){
        //显示加载图片
        img.style.display = 'inline-block';
        //按钮属性禁用
        btn.setAttribute('disabled','');
        //创建xhr对象
        var xhr;
        if(window.XMLHttpRequest){
          xhr = new XMLHttpRequest();
        }else{
          xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        //异步接受响应
        xhr.onreadystatechange = function(){
          if(xhr.readyState == 4){
            if(xhr.status == 200){
            //隐藏加载图片
            img.style.display = 'none';
            //按钮属性禁用移除
            btn.removeAttribute('disabled');
            //实际操作
            result.innerHTML += xhr.responseText;
            }
          }
        }  
        //发送请求
        xhr.open('get','message.xml',true);
        // 设置期望的返回数据类型 'json' 'text' 'document' ...
        xhr.responseType = '';
        // 设置请求头 'Content-Type': 'application/json; charset=UTF-8'/'multipart/form-data'
        xhr.setRequestHeader('', '');
        //请求超时后触发
        xhr.ontimeout = function(){
          console.log('The request timed out.');
         }
        xhr.timeout = 1000;
        xhr.send();//请求参数
      }
    </script>

    springmvc controller中接收和返回XML数据
      @RequestMapping 位于org.springframework.web.bind.annotation(绑定注解)
      value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
      method: 指定请求的method类型, GET、POST、PUT、DELETE等;
      consumes(消费): 指定请求提交的内容类型(Content-Type),例如application/json,application/xml,text/html=String;
      produces(生产): 指定返回的内容类型,仅当request请求头headers中的(Accept类型)中包含该指定类型才返回;如:例如application/json,application/xml,text/html=String;
      params(参数): 指定request中必须包含某些参数值是,才让该方法处理。
      headers(请求头): 指定request中必须包含某些指定的header值,才能让该方法处理请求。

    @Controller
    public class XmlController {
      //请求的数据格式
      @PostMapping(value = "/sendxml",headers = {"content-type=application/xml"})
      public void sendxml(@RequestBody User user){
      logger.info(JSONObject.toJSONString(user));
      logger.info("接收xml数据成功");
      }


      //响应的数据格式
      @RequestMapping(value = "/xml", produces={"application/xml; charset=UTF-8"}, method = { RequestMethod.GET,
      RequestMethod.POST })
      @ResponseBody
      public String xml(HttpServletRequest request, HttpServletResponse response)throws Exception {
        String xmlData = "<person>"
                + "<name>tom</name>"
                + "<age>17</age>"
               + "</person>";
        return xmlData;
      }


      //设置 请求及响应的数据格式
      @RequestMapping(value = "/地址",consumes = "application/xml",produces ="application/xml",method = RequestMethod.POST)
      @ResponseBody
      public String initAuthentication(@RequestBody StudentPojo studentPojo ) {
        System.out.println(studentPojo.getId());
      }
    }

    HTTP请求报文三个部分组成
      POST /search HTTP/1.1        //→请求行(request line)、
      Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
      application/msword, application/x-silverlight, application/x-shockwave-flash, */*
      Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
      Accept-Language: zh-cn
      Accept-Encoding: gzip, deflate     //↑↓请求头部(header)
      User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
      Host: <a href="http://www.google.cn">www.google.cn</a>
      Connection: Keep-Alive
      Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
      NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
      FxlRugatx63JLv7CWMD6UB_O_r
    
      hl=zh-CN&source=hp&q=domety      //→请求数据(参数)(request-body)
      //可以看到,POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分
    
    HTTP响应报文也由三个部分组成,分别是:状态行、消息报头、响应正文。
      下面给出一个HTTP响应报文例子
      HTTP/1.1 200 OK              //→status-line状态行
      Date: Sat, 31 Dec 2005 23:59:59 GMT
      Content-Type: text/html;charset=ISO-8859-1 //↑↓headers消息响应报头
      Content-Length: 122
    
      <html>                  //→response-body响应正文
        <head>
        <title>Wrox Homepage</title>
        </head>
        <body>
        <!-- body goes here -->
        </body>
      </html>
      常见状态代码、状态描述的说明如下。
      200 OK:客户端请求成功。
      400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
      401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
      403 Forbidden:服务器收到请求,但是拒绝提供服务。
      404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
      500 Internal Server Error:服务器发生不可预期的错误。
      503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
    
    ajax技术的核心是XMLHttpRequest对象
    
    ajax通过原生的XMLHttpRequest对象发出HTTP请求,得到服务器返回的数据后,再进行处理
    创建同步请求
      //message.xml格式数据
      <p>hello world</p>
    
      <button id="btn">获取信息</button>
      <div id="result"></div>
      <script>
      btn.onclick = function(){
        //创建xhr对象
        var xhr;
        if(window.XMLHttpRequest){
          xhr = new XMLHttpRequest();
        }else{
          xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        //发送请求
        xhr.open('get','/uploads/rs/26/ddzmgynp/message.xml',false);//默认true异步响应,
        xhr.send();//请求参数
        //同步接受响应
        if(xhr.readyState == 4){//4代表完成响应
          if(xhr.status == 200){
          //实际操作
          result.innerHTML += xhr.responseText;
          }
        }
      }
    </script>
    创建异步请求
      <button id="btn">获取信息</button>
      <div id="result"></div>
      <script>
      btn.onclick = function(){
        //显示加载图片
        img.style.display = 'inline-block';
        //按钮属性禁用
        btn.setAttribute('disabled','');
        //创建xhr对象
        var xhr;
        if(window.XMLHttpRequest){
          xhr = new XMLHttpRequest();
        }else{
          xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        //异步接受响应
        xhr.onreadystatechange = function(){
          if(xhr.readyState == 4){
            if(xhr.status == 200){
            //隐藏加载图片
            img.style.display = 'none';
            //按钮属性禁用移除
            btn.removeAttribute('disabled');
            //实际操作
            result.innerHTML += xhr.responseText;
            }
          }
        }  
        //发送请求
        xhr.open('get','message.xml',true);
        // 设置期望的返回数据类型 'json' 'text' 'document' ...
        xhr.responseType = '';
        // 设置请求头 'Content-Type': 'application/json; charset=UTF-8'/'multipart/form-data'
        xhr.setRequestHeader('', '');
        //请求超时后触发
        xhr.ontimeout = function(){
          console.log('The request timed out.');
         }
        xhr.timeout = 1000;
        xhr.send();//请求参数
      }
    </script>
    
    springmvc controller中接收和返回XML数据
      @RequestMapping 位于org.springframework.web.bind.annotation(绑定注解)
      value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
      method: 指定请求的method类型, GET、POST、PUT、DELETE等;
      consumes(消费): 指定请求提交的内容类型(Content-Type),例如application/json,application/xml,text/html=String;
      produces(生产): 指定返回的内容类型,仅当request请求头headers中的(Accept类型)中包含该指定类型才返回;如:例如application/json,application/xml,text/html=String;
      params(参数): 指定request中必须包含某些参数值是,才让该方法处理。
      headers(请求头): 指定request中必须包含某些指定的header值,才能让该方法处理请求。
    
    @Controller
    public class XmlController {
      //请求的数据格式
      @PostMapping(value = "/sendxml",headers = {"content-type=application/xml"})
      public void sendxml(@RequestBody User user){
      logger.info(JSONObject.toJSONString(user));
      logger.info("接收xml数据成功");
      }
    
    
      //响应的数据格式
      @RequestMapping(value = "/xml", produces={"application/xml; charset=UTF-8"}, method = { RequestMethod.GET,
      RequestMethod.POST })
      @ResponseBody
      public String xml(HttpServletRequest request, HttpServletResponse response)throws Exception {
        String xmlData = "<person>"
                + "<name>tom</name>"
                + "<age>17</age>"
               + "</person>";
        return xmlData;
      }
    
    
      //设置 请求及响应的数据格式
      @RequestMapping(value = "/地址",consumes = "application/xml",produces ="application/xml",method = RequestMethod.POST)
      @ResponseBody
      public String initAuthentication(@RequestBody StudentPojo studentPojo ) {
        System.out.println(studentPojo.getId());
      }
    }
  • 相关阅读:
    模式使用详解 手拉手就是职责链吗?
    简单说两句味道
    胡说两句...
    补充说明: 表驱动, 链表与职责链
    C++/CLI和TMP: enum hack相當於static const int吗?
    WCF NetTcpBinding Transport安全模式(9) ClientCredentialType证书验证模式Custom验证模式
    WCF NetTcpBinding Transport安全模式(8) ClientCredentialType证书验证模式 PeerOrChainTrust验证模式
    WCF NetTcpBinding Transport安全模式(2) 默认安全配置
    WCF NetTcpBinding Transport安全模式(7) ClientCredentialType证书验证模式 ChainTrust验证模式
    WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式 PeerTrust验证模式
  • 原文地址:https://www.cnblogs.com/Bkxk/p/14149738.html
Copyright © 2011-2022 走看看