XMLhttpRequest 请求 XML,JSON ,POJO 数据

来源:互联网 发布:mac keeper劫持 编辑:程序博客网 时间:2024/06/08 03:41

http://takeme.iteye.com/blog/1691725

在使用XMlhttpRequest对象发送请求和响应之前,必须首先使用javaScript对象创建一个XMLHttpRquest对象。 

Js代码  收藏代码
  1. var xmlhttp;  
  2. function getXMLHttpRequest(){  
  3.   if(window.ActiveXObject){  
  4.     xmlhttp:new ActiveXObject("Microsoft.XMLHTTP");  
  5.    }  
  6.   else if(window.XMLHTTPrequest){  
  7.     xmlHttp=new XMLHttpRequest();  
  8.   }  
  9. }  

XMLHttpRequest 对象的方法 
Java代码  收藏代码
  1. abort() 该方法哟用于取消当前的请求。  
  2.   
  3. getAllREsponseHeaders(); 用于获取响应的所有HTTP头部。  
  4.   
  5. getResponseHeaders().从响应信息中获取指定的HTTp头,其使用格式如下:String getResponseHeader(String header);  
  6.   
  7. open():用于创建一个新的Http请求,并指定次请求的方法,URL以及验证消息。其使用格式如下:  
  8.   void open(String method,String url,boolean asynch,String userName ,String password)  
  9.   
  10. send():用于发送请求到HTTP服务器并接受回应,其格式如下:void send(String content)  
  11.   
  12. setRequestHeader() 用于单独指定求的某个http头,其使用格式如下 void setRequestHeader(String header,String value);  
  13.   
  14. onreadyStateChange:该树形用于指定readState树形改变时的事件处理函数,当服务器返回数据到客户端时,需要相印的JavaScript函数去处理这些数据。  
  15.   
  16. responseBody:将响应信息正文以 u;nsigned byte 数组形式返回。  
  17.   
  18. responseText:将响应系响应作为字符串返回  
  19.   
  20. responseXML:将响应信息作为XML Document对象返回。  
  21.   
  22. readState:返回当前请求的状态,有5个可取值,分别为  
  23.    0:为初始化,即对象已建立,但是尚未初始化,(尚未调用open())  
  24.    1:表示正在加载,此时对象已建立,尚未调用 send()  
  25.    2:表示已加载,即已骠勇send()方法,但是当前状态及Http头未知  
  26.    3:表示交互中,此时已接受部分数据,因为响应及Http头不全,这时通过responseBody和responseText:获取部分参数会出现错误。  
  27.   4:表示完成,即数据接受完毕,此时可以通过responseBody和responseText获取完整的回应数据。  
  28.   
  29. status:返回当前请求的HTTP状态码:例如 200对应OK 404:对应Not Found,该属性仅在readyState属性值为 3或者 4有效。  
  30.   
  31. statusText:返回当前请求的响应行状态,例如Ok NotFound。该属性仅在readyState属性值为 3 或者 4时有效。  



--------XMLHttpRequest--------------- 
示例1: 
创建javaweb工程 
index.jsp 
Html代码  收藏代码
  1. </head>  
  2.   <%  
  3.     Date now=new Date();  
  4.   %>  
  5.   <body>  
  6.     <center>  
  7.     <h3>当前时间为:<%=now %></h3>  
  8.     <hr/>  
  9.             点击歌名看歌词  
  10.     <input type="button" value="浪子心声" onclick="getLyrice('lzxs')"/>  
  11.     <input type="button" value="暗里着迷" onclick="getLyrice('alzm')"/>  
  12.     <br/><br/>  
  13.     <span id="showLyrice">  
  14.         暂时还没有选择歌曲!  
  15.     </span>  
  16.     </center>  
  17.     <script type="text/javascript">  
  18.         var xmlhttp;  
  19.         function getXMLHttpRequest(){  
  20.             if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"  
  21.                 //针对FireFox,Mozilla,Opera,Safari,IE7,IE8  
  22.                 xmlhttp=new XMLHttpRequest();  
  23.                 //针对某些特定的版本的mozilla浏览器的BUG进行修正  
  24.                 if(xmlhttp.overrideMimeType){  
  25.                     xmlhttp.overrideMimeType("text/html");  
  26.                 }  
  27.              }else if(window.ActiveXObject){  
  28.                 //针对 IE6 IE5.5 IE5  
  29.                 //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中  
  30.                 var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
  31.                 for(var i=0;i<activexName.length;i++){  
  32.                     try{  
  33.                         //取出控件名称进行创建,如果创建成功终止循环  
  34.                         //如果创建失败,抛出异常,然后可以继续循环,继续尝试  
  35.                         xmlhttp=new ActiveXObject(activexName[i]);  
  36.                         break;  
  37.                     }catch(e){  
  38.           
  39.                     }  
  40.                 }  
  41.             }  
  42.             //确认XMLHTTPRequest对象创建成功  
  43.             if(!xmlhttp){  
  44.                 alert("XMLHttpRequest对象创建失败!");  
  45.                 return;  
  46.             }  
  47.         }  
  48.         function getLyrice(songName){  
  49.             getXMLHttpRequest();  
  50.               
  51.             xmlhttp.open("GET","data.jsp?songName="+songName,true);  
  52.             xmlhttp.onreadystatechange=returnLyrice;  
  53.             xmlhttp.send(null);  
  54.         }  
  55.         //回调函数  
  56.         function returnLyrice(){  
  57.             if(xmlhttp.readyState==4){  
  58.                 var lyrics=xmlhttp.responseText;  
  59.                 document.getElementById("showLyrice").innerHTML=lyrics;  
  60.             }  
  61.         }  
  62.     </script>  
  63.   </body>  


data.jsp 
Html代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5.   
  6. String songName=request.getParameter("songName");  
  7. if("lzxs".equals(songName)){  
  8.     out.println("<br/>");  
  9.     out.println("<font size='5' color='red'>浪子心声</font><br/>");  
  10.     out.println("<font size='2'>刘德华</font><br/>");  
  11. }  
  12. else if("alzm".equals(songName)){  
  13.     out.println("<br/>");  
  14.     out.println("<font size='5' color='red'>暗里着迷</font><br/>");  
  15.     out.println("<font size='2'>刘德华</font><br/>");  
  16. }  
  17. %>  


--------------XML 数据载体-------------- 
menu.jsp 
Html代码  收藏代码
  1. <body>  
  2.     <h3>级联菜单</h3>  
  3.     选择省份:  
  4.     <select name="provinces" id="provincesID" onchange="getCities()">  
  5.         <option value="">=选择身份=</option>  
  6.         <option value="zj">浙江</option>  
  7.         <option value="gd">广东</option>  
  8.     </select>  
  9.     选择城市:  
  10.     <select name="cities" id="citiesID">  
  11.         <option value="">=选择城市=</option>  
  12.     </select>  
  13.     <script type="text/javascript">  
  14.      var xmlhttp;  
  15.      function getCities(){  
  16.          var province=document.getElementById("provincesID").value;  
  17.          getXMLHttpRequest();  
  18.          xmlhttp.open("GET","${pageContext.request.contextPath}/servlet/XMLServlet?province="+province,true);  
  19.          xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
  20.          xmlhttp.onreadystatechange=returnCities;  
  21.          xmlhttp.send(null);  
  22.      }  
  23.        
  24.      function returnCities(){  
  25.          if(xmlhttp.readyState==4){ //表示请求和响应的处理结束了  
  26.              if(xmlhttp.status==200){ //表示处理后的状态  
  27.                  var returnXML=xmlhttp.responseXML;  
  28.                  var cs=document.getElementById("citiesID");  
  29.                  alert(returnXML);  
  30.                  var city=returnXML.getElementsByTagName("city");  
  31.                  while(cs.childNodes.length>2){  
  32.                      cs.removeChild(cs.childNodes[cs.childNodes.length-1]);  
  33.                  }  
  34.                  for(var i=0;i<city.length;i++){  
  35.                      var option=document.createElement("option");  
  36.                      option.innerText=city[i].firstChild.data;  
  37.                      cs.appendChild(option);  
  38.                  }  
  39.              }  
  40.          }  
  41.      }  
  42.        
  43.      function getXMLHttpRequest(){  
  44.             if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"  
  45.                 //针对FireFox,Mozilla,Opera,Safari,IE7,IE8  
  46.                 xmlhttp=new XMLHttpRequest();  
  47.                 //针对某些特定的版本的mozilla浏览器的BUG进行修正  
  48.                 if(xmlhttp.overrideMimeType){  
  49.                      //如果返回的是xml数据 需要将 text/html --> text/xml  
  50.                     xmlhttp.overrideMimeType("text/xml");  
  51.                 }  
  52.              }else if(window.ActiveXObject){  
  53.                 //针对 IE6 IE5.5 IE5  
  54.                 //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中  
  55.                 var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
  56.                 for(var i=0;i<activexName.length;i++){  
  57.                     try{  
  58.                         //取出控件名称进行创建,如果创建成功终止循环  
  59.                         //如果创建失败,抛出异常,然后可以继续循环,继续尝试  
  60.                         xmlhttp=new ActiveXObject(activexName[i]);  
  61.                         break;  
  62.                     }catch(e){  
  63.           
  64.                     }  
  65.                 }  
  66.             }  
  67.             //确认XMLHTTPRequest对象创建成功  
  68.             if(!xmlhttp){  
  69.                 alert("XMLHttpRequest对象创建失败!");  
  70.                 return;  
  71.             }  
  72.         }  
  73.     </script>  
  74.   </body>  

xmlServlet.java 
Java代码  收藏代码
  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9.   
  10. public class XMLServlet extends HttpServlet {  
  11.   
  12.       
  13.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  14.             throws ServletException, IOException {  
  15.            doPost(request, response);  
  16.     }  
  17.   
  18.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  19.             throws ServletException, IOException {  
  20.         response.setContentType("application/xml;charset=utf-8");  
  21.         //response.setContentType("text/xml;charset=utf-8");  
  22.         PrintWriter out = response.getWriter();  
  23.         String province=request.getParameter("province");  
  24.         System.out.println("param:"+province);  
  25.         StringBuilder sb=new StringBuilder();  
  26.         if("zj".equals(province)){  
  27.             sb.append("<?xml version='1.0' encoding='UTF-8' ?>");  
  28.             sb.append("<cities>");  
  29.             sb.append("<city>杭州</city>");  
  30.             sb.append("<city>宁波</city>");  
  31.             sb.append("<city>温州</city>");  
  32.             sb.append("<city>天台</city>");  
  33.             sb.append("</cities>");  
  34.         }  
  35.         else if("gd".equals(province)){  
  36.             sb.append("<?xml version='1.0' encoding='UTF-8' ?>");  
  37.             sb.append("<cities>");  
  38.             sb.append("<city>广州</city>");  
  39.             sb.append("<city>深圳</city>");  
  40.             sb.append("<city>珠海</city>");  
  41.             sb.append("<city>东莞</city>");  
  42.             sb.append("</cities>");  
  43.         }  
  44.         System.out.println(sb.toString());  
  45.         out.print(sb.toString());  
  46.     }  
  47.   
  48. }  

--------------Json 数据载体-------------- 
Java代码  收藏代码
  1. json:(javaScript Object Notation) 是一种轻量级的数据交换格式,它是一种特定额字符串形式来表示的javaScript对象,如果将具有这样一种形式的字符串赋值给一个javaScript变量,该变量随后将引用一个通过指定给该变量的字符串构建对象。  
  2.  JSON是独立于语言的,他主要有如下两种数据结构  
  3.   
  4. 1.名/值对的集合  
  5.   在不同的语言中,它白实现为对象(object) 记录(record) 结构(struct) 字典(dictionary) 哈希表(hashCode) 有键列表(key List) 或者 关联数组(associative array )  
  6.   
  7. 2.值的有序列表  
  8.   在大部分语言中,它被实现为数组(array)  

Java代码  收藏代码
  1. 对象:  
  2.   对象是一个无序的名/值对集合。一个对象在以左花括号({) 开始,以右花括号(})结束.每个名称和值之间以(;)分隔,名/值对之间使用英文逗号(,)  
  3.  例如:  
  4.  <script type="text/javascript">  
  5.     var user={"userName":"xiaoqi","sex":"男","age":"24"}  
  6.  </script>  
  7.   
  8.   
  9. 数组  
  10.  数组是值(value)的有序集合,一个数组以坐括号([)开始,以右括号结束(]),值之间使用英文(,)逗号分隔  
  11.   例如:  
  12.    <script type="text/javascript">  
  13.    var userName=["xiaoqi","xiaoxue","candy"];  
  14.   </script>  
  15.   
  16. 值  
  17.   值可以是双引号括起来的字符串(String) 数组(number) true false null 对象(object) 数组 (array) 这些结构可以嵌套  
  18.   
  19. 字符串  
  20.   字符串(String) 是有双引号阔气阿里的认识数量Unicode字符的集合,使用反斜杠(\)转义,一个字符串即一个单独的字符串  
  21.   
  22. 数值  
  23.  数值(number)与java中的数值非常相似,但不区分整型值和浮点型.也不支持8进制和16进制格式.  
  24.   
  25. 与xml比较  
  26. 1:JSON是类型化的,值可以是String number array boolean object null 而xml 是无类型的.所有的值是字符串.  
  27. 2.使用JSON 不需要再解析数据.  
  28.   例如:服务器端的响应可以是一下的JSON串:  
  29.   {name:"xiaoqi",age:"24"}  
  30.   使用eval()函数可以将这个JSON串换为javaScript 对象,如下  
  31.   var user=eva('('+xmlhttp.responseText+')');  

示例: 
Html代码  收藏代码
  1. <body>  
  2.     <h3>JSON的使用</h3>  
  3.     <input type="button" value="获取JSON数据" onclick="getInfo()"/>  
  4.     <div id="showInfo"></div>  
  5. <script type="text/javascript">  
  6.     var xmlhttp;  
  7.     function getInfo(){  
  8.         getXMLHttpRequest();  
  9.         xmlhttp.open("GET","jslib/user.txt",true);  
  10.         xmlhttp.onreadystatechange=returnInfo;  
  11.         xmlhttp.send(null);  
  12.     }  
  13.       
  14.     function returnInfo(){  
  15.         if(xmlhttp.readyState=4){  
  16.             if(xmlhttp.status==200){  
  17.                 var info=xmlhttp.responseText;  
  18.                 var func=new Function("return"+info);  
  19.                 var json=func();  
  20.                 var value="姓名:<font color='red'>"+json.name+"</font>&nbsp;&nbsp;";  
  21.                 value+="年龄:<font color='red'>"+json.age+"</font>";  
  22.                 document.getElementById("showInfo").innerHTML=value;  
  23.             }  
  24.         }  
  25.     }  
  26.     function getXMLHttpRequest(){  
  27.             if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"  
  28.                 //针对FireFox,Mozilla,Opera,Safari,IE7,IE8  
  29.                 xmlhttp=new XMLHttpRequest();  
  30.                 //针对某些特定的版本的mozilla浏览器的BUG进行修正  
  31.                 if(xmlhttp.overrideMimeType){  
  32.                      //如果返回的是xml数据 需要将 text/html --> text/xml  
  33.                     xmlhttp.overrideMimeType("text/html");  
  34.                 }  
  35.              }else if(window.ActiveXObject){  
  36.                 //针对 IE6 IE5.5 IE5  
  37.                 //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中  
  38.                 var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
  39.                 for(var i=0;i<activexName.length;i++){  
  40.                     try{  
  41.                         //取出控件名称进行创建,如果创建成功终止循环  
  42.                         //如果创建失败,抛出异常,然后可以继续循环,继续尝试  
  43.                         xmlhttp=new ActiveXObject(activexName[i]);  
  44.                         break;  
  45.                     }catch(e){  
  46.           
  47.                     }  
  48.                 }  
  49.             }  
  50.             //确认XMLHTTPRequest对象创建成功  
  51.             if(!xmlhttp){  
  52.                 alert("XMLHttpRequest对象创建失败!");  
  53.                 return;  
  54.             }  
  55.         }  
  56.   
  57. </script>      
  58.   </body>  


jslib/user.txt 
Java代码  收藏代码
  1. {name:"xiaoqi",age:"24"}  


--------------------dojo的使用-------------------- 
1.在webroot文件夹下导入dojo所需要的文件 
dojo  dojox  dijit 

示例:dojo.jsp 
Html代码  收藏代码
  1. <body>  
  2.    <div id="showDate"></div><br/>  
  3.    <input type="button" value="获取服务器当前的时间" onclick="getDate()"/>  
  4.    <script type="text/javascript" src="dojo/dojo/dojo.js"></script>  
  5.    <script type="text/javascript">  
  6.     function getDate(){  
  7.         dojo.xhrGet({  
  8.             url:"getDate.jsp",  
  9.             load:returnDate,  
  10.             error:dealError  
  11.         });  
  12.     }  
  13.     function returnDate(data,ioArgs){  
  14.         document.getElementById("showDate").innerHTML=data;  
  15.     }  
  16.       
  17.     function dealError(data,ioArgs){  
  18.         document.getElementById("showDate").innerHTML="服务器访问失败!";  
  19.     }  
  20.      
  21.    </script>  
  22.  </body>  


getDate.jsp 
Html代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. out.println("服务器当前日期时间为:<font color='red'>"+new Date()+"</font>");  
  4. %>  


--------------Struts2 使用 json------------------- 
1.添加 struts2-json-plugin-2.3.4.jar 
test.action 
Java代码  收藏代码
  1. package com.sh.action;  
  2.   
  3. import org.apache.struts2.json.annotations.JSON;  
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.   
  7. @SuppressWarnings("serial")  
  8. public class Test extends ActionSupport {  
  9.     private int studentId=1001;  
  10.     private String studentName="小霸王";  
  11.     private String studentSex="男";  
  12.     private int studentAge=21;  
  13.     private String studentClass="04PC";  
  14.     private String studentAddress="北京市朝阳区";  
  15.       
  16. //  注释后 返回的json字符串中将没有这个 键值对  
  17. //  public int getStudentId() {  
  18. //      return studentId;  
  19. //  }  
  20.     public void setStudentId(int studentId) {  
  21.         this.studentId = studentId;  
  22.     }  
  23.     public String getStudentName() {  
  24.         return studentName;  
  25.     }  
  26.     public void setStudentName(String studentName) {  
  27.         this.studentName = studentName;  
  28.     }  
  29.     public String getStudentSex() {  
  30.         return studentSex;  
  31.     }  
  32.     public void setStudentSex(String studentSex) {  
  33.         this.studentSex = studentSex;  
  34.     }  
  35.     //添加JSON注解  不序列化  
  36.     @JSON(serialize=false)  
  37.     public int getStudentAge() {  
  38.         return studentAge;  
  39.     }  
  40.     public void setStudentAge(int studentAge) {  
  41.         this.studentAge = studentAge;  
  42.     }  
  43.     public String getStudentClass() {  
  44.         return studentClass;  
  45.     }  
  46.     public void setStudentClass(String studentClass) {  
  47.         this.studentClass = studentClass;  
  48.     }  
  49.     public String getStudentAddress() {  
  50.         return studentAddress;  
  51.     }  
  52.     public void setStudentAddress(String studentAddress) {  
  53.         this.studentAddress = studentAddress;  
  54.     }  
  55.     @Override  
  56.     public String execute() throws Exception {  
  57.         // TODO Auto-generated method stub  
  58.         return SUCCESS;  
  59.     }     
  60. }  


struts.xml 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <constant name="struts.i18n.encoding" value="utf-8"/>  
  8.     <package name="default" extends="json-default">  
  9.         <action name="test" class="com.sh.action.Test">  
  10.             <result type="json">  
  11.                 <param name="excludeProperties">studentAddress</param>  
  12.             </result>  
  13.         </action>  
  14.     </package>  
  15. </struts>  



后面的theme="ajax" 由于 struts-dojo中少了模版文件 写的例子都运行不了 所以就不发了 


----------------------Struts2中 采用ajax输入校验----------- 
Struts2中的AJax输入校验使用的是DWR矿框架,下面举例介绍在Struts2中使用DWR框架进行AJax输入校验 
Java代码  收藏代码
  1. 1.加载DWR文件,使用DWR款家需要在web应用中加载DWRjar文件的jwr.jar 该文件可以通过http://directwebremoting.org/dwr/download 进行下载,下载后将dwr复制到web应用的web-inf/lib目录中  
  2.   
  3. .配置DWR   
  4.  创建一个WEB应用,然后配置好Struts2的开发环境,并添加dwr.jar 然后配置dwr,需要在web.xml文件中配置DWR核心Servlet  


0 0
原创粉丝点击