Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7333462
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68080
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:47:21

下载本文示例代码
  首先看下看下相对简单些的--向服务器发送一个包含有名/值对的简单查询串,在这种情况下XHP即可以用GET也可以用POST。 GETfunction doRequestUsingGET() { createXMLHttpRequest(); var queryString = " GetAndPostExample? " ; queryString = queryString createQueryString() " &timeStamp= " new Date().getTime(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open( " GET " , queryString, true ); xmlHttp.send( null );} POSTfunction doRequestUsingPOST() { createXMLHttpRequest(); var url = " GetAndPostExample?timeStamp= " new Date().getTime(); var queryString = createQueryString(); xmlHttp.open( " POST " , url, true ); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );  xmlHttp.send(queryString);}   queryString就是名/值对的参数形式了(如name=LiLin&age=23),在调用OPEN方法中,当请求方法是用POST的时候为了确保服务器知道请求体中有请求参数,需要调用setRequestHeader,将Content-Type值设置为application/x-www-form-urlencoded.当然也可不放在请求体中(那就不要用POST啦!)  此时server处理: import java.io. * ;import java.net. * ;import javax.servlet. * ;import javax.servlet.http. * ;public class GetAndPostExample extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response, String method)throws ServletException, IOException {  // Set content type of the response to text/xml   response.setContentType( " text/xml " );  // Get the user's input   String firstName = request.getParameter( " firstName " );  String middleName = request.getParameter( " middleName " );  String birthday = request.getParameter( " birthday " );  // Create the response text   String responseText = " Hello " firstName " " middleName " . Your birthday is " birthday " . " " [Method: " method " ] " ;  // Write the response back to the browser   PrintWriter out = response.getWriter();  out.println(responseText);  // Close the writer   out.close(); }  protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  // Process the request in method processRequest   processRequest(request, response, " GET " ); }  protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  // Process the request in method processRequest   processRequest(request, response, " POST " ); } }   对get and post方法都用processRequest来处理。  要向服务器发送相关复杂的查询串,可以将模型变化为XML发送到server 。  client端: function createXML() { var xml = " " ; var options = document.getElementById( " petTypes " ).childNodes; var option = null ; for ( var i = 0 ; i < options.length; i ) {  option = options[i];  if (option.selected) {   xml = xml " " option.value " <\/type> " ;  }  }  xml = xml " <\/pets> " ; return xml;} function sendPetTypes() { createXMLHttpRequest(); var xml = createXML(); var url = " PostingXMLExample?timeStamp= " new Date().getTime(); xmlHttp.open( " POST " , url, true ); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );  xmlHttp.send(xml);}   createXML方法无非就是将内容以DOM的样式存到var xml(变量)里。有时也可能出现client直接将本地的一个XML文件直接以DOM(当然可以edit)的样式传送.(也放这个时个的Content-Type应该为text/xml了!)这时可能要用到ActiveXObject("MSXML2.DOMDocument.3.0")这样一个控件了。  关于这个控件有个方法可以在各broswer中通用的JS代码: // -------------------------------------------------------------------- // Function: CreateXMLDOM //// Purpose: Creates a new XML DOM. //// Parameters: None //// Returns: XMLDOM object OR null // -------------------------------------------------------------------- function CreateXmlDOM(){ var oXML = new ActiveXObject(GetXmlParserProgID()); try  {  oXML.setProperty( " AllowXsltScript " , true ); }  catch (err) {}  oXML.async = false ; oXML.validateOnParse = false ; oXML.resolveExternals = false ; oXML.setProperty( " SelectionLanguage " , " XPath " ); try {oXML.setProperty( " NewParser " , true );} catch (e) {}  return oXML;} // -------------------------------------------------------------------- // Function: GetXmlParserProgID //// Purpose: // Gets the ProgID of the highest available version of the // Microsoft XML parser. //// Parameters: None //// Returns: String (i.e. "Msxml2.DOMDocument.4.0") //// -------------------------------------------------------------------- function GetXmlParserProgID(){ var MAX_MAJOR_PARSER_VERSION = 10 ; var MIN_MAJOR_PARSER_VERSION = 0 ; var MAX_MINOR_PARSER_VERSION = 9 ; var MIN_MINOR_PARSER_VERSION = 0 ; var sProgID = g_sXmlParserProgID; var bFound = false ; if ( ! sProgID) {  // Iterate through possible versions   for ( var nMajor = MAX_MAJOR_PARSER_VERSION; nMajor >= MIN_MAJOR_PARSER_VERSION; nMajor -- )  {   for ( var nMinor = MAX_MINOR_PARSER_VERSION; nMinor >= MIN_MINOR_PARSER_VERSION; nMinor -- )   {    // Set up the classname for the version that we're trying to instantiate     sProgID = " Msxml2.DOMDocument. " nMajor " . " nMinor;    try     {      if ( new ActiveXObject(sProgID))      {      bFound = true ;      break ;     }     }     catch (e)    {}    }    if (bFound)   {    // store in a global variable to speedup subsequent calls     g_sXmlParserProgID = sProgID;    break ;   }   }  }  return sProgID;}   然后直接用其load方法(本地)。 var xmlDoc = new ActiveXObject( " MSXML2.DOMDocument.3.0 " );xmlDoc.load(local_XML_FileName);  当然也可以直接从server取来(用get方法即可),然后以responseText的方法 xmlht.Open( " GET " ,server_XML_FileName, true );xmlht.onreadystatechange = stateChange;xmlht.Send( null );function handleStateChange() { if (xmlHttp.readyState == 4 ) {  if (xmlHttp.status == 200 ) {   xmlDoc.loadXML(xmlht.responseText);  }  } }   实际上xmlDoc.loadXML(xmlht.responseText)所得到的就是一个于内存中的DOM了,而直接用responseXML的话就直接可以解析为一个DOM了!(注意load(FILE)与loadXML(DOM)是不同的)  此时servert process : import java.io. * ;import javax.servlet. * ;import javax.servlet.http. * ;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class PostingXMLExample extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String xml = readXMLFromRequestBody(request);Document xmlDoc = null ;try {xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( new ByteArrayInputStream(xml.getBytes()));} catch (ParserConfigurationException e) {System.out.println( " ParserConfigurationException: " e);} catch (SAXException e) {System.out.println( " SAXException: " e);} /**/ /* Note how the Java implementation of the W3C DOM has the same methods* as the JavaScript implementation, such as getElementsByTagName and * getNodeValue.*/ NodeList selectedPetTypes = xmlDoc.getElementsByTagName( " type " );String type = null ;String responseText = " Selected Pets: " ;for ( int i = 0 ; i < selectedPetTypes.getLength(); i ) {type = selectedPetTypes.item(i).getFirstChild().getNodeValue();responseText = responseText " " type;} response.setContentType( " text/xml " );response.getWriter().print(responseText);} private String readXMLFromRequestBody(HttpServletRequest request) {StringBuffer xml = new StringBuffer();String line = null ;try {BufferedReader reader = request.getReader();while ((line = reader.readLine()) != null ) {xml.append(line);} } catch (Exception e) {System.out.println( " Error reading XML: " e.toString());} return xml.toString();} }   DOM,JDOM,JAXP随便你自己选好了!   首先看下看下相对简单些的--向服务器发送一个包含有名/值对的简单查询串,在这种情况下XHP即可以用GET也可以用POST。 GETfunction doRequestUsingGET() { createXMLHttpRequest(); var queryString = " GetAndPostExample? " ; queryString = queryString createQueryString() " &timeStamp= " new Date().getTime(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open( " GET " , queryString, true ); xmlHttp.send( null );} POSTfunction doRequestUsingPOST() { createXMLHttpRequest(); var url = " GetAndPostExample?timeStamp= " new Date().getTime(); var queryString = createQueryString(); xmlHttp.open( " POST " , url, true ); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );  xmlHttp.send(queryString);}   queryString就是名/值对的参数形式了(如name=LiLin&age=23),在调用OPEN方法中,当请求方法是用POST的时候为了确保服务器知道请求体中有请求参数,需要调用setRequestHeader,将Content-Type值设置为application/x-www-form-urlencoded.当然也可不放在请求体中(那就不要用POST啦!)  此时server处理: import java.io. * ;import java.net. * ;import javax.servlet. * ;import javax.servlet.http. * ;public class GetAndPostExample extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response, String method)throws ServletException, IOException {  // Set content type of the response to text/xml   response.setContentType( " text/xml " );  // Get the user's input   String firstName = request.getParameter( " firstName " );  String middleName = request.getParameter( " middleName " );  String birthday = request.getParameter( " birthday " );  // Create the response text   String responseText = " Hello " firstName " " middleName " . Your birthday is " birthday " . " " [Method: " method " ] " ;  // Write the response back to the browser   PrintWriter out = response.getWriter();  out.println(responseText);  // Close the writer   out.close(); }  protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  // Process the request in method processRequest   processRequest(request, response, " GET " ); }  protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  // Process the request in method processRequest   processRequest(request, response, " POST " ); } }   对get and post方法都用processRequest来处理。  要向服务器发送相关复杂的查询串,可以将模型变化为XML发送到server 。  client端: function createXML() { var xml = " " ; var options = document.getElementById( " petTypes " ).childNodes; var option = null ; for ( var i = 0 ; i < options.length; i ) {  option = options[i];  if (option.selected) {   xml = xml " " option.value " <\/type> " ;  }  }  xml = xml " <\/pets> " ; return xml;} function sendPetTypes() { createXMLHttpRequest(); var xml = createXML(); var url = " PostingXMLExample?timeStamp= " new Date().getTime(); xmlHttp.open( " POST " , url, true ); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );  xmlHttp.send(xml);}   createXML方法无非就是将内容以DOM的样式存到var xml(变量)里。有时也可能出现client直接将本地的一个XML文件直接以DOM(当然可以edit)的样式传送.(也放这个时个的Content-Type应该为text/xml了!)这时可能要用到ActiveXObject("MSXML2.DOMDocument.3.0")这样一个控件了。  关于这个控件有个方法可以在各broswer中通用的JS代码: // -------------------------------------------------------------------- // Function: CreateXMLDOM //// Purpose: Creates a new XML DOM. //// Parameters: None //// Returns: XMLDOM object OR null // -------------------------------------------------------------------- function CreateXmlDOM(){ var oXML = new ActiveXObject(GetXmlParserProgID()); try  {  oXML.setProperty( " AllowXsltScript " , true ); }  catch (err) {}  oXML.async = false ; oXML.validateOnParse = false ; oXML.resolveExternals = false ; oXML.setProperty( " SelectionLanguage " , " XPath " ); try {oXML.setProperty( " NewParser " , true );} catch (e) {}  return oXML;} // -------------------------------------------------------------------- // Function: GetXmlParserProgID //// Purpose: // Gets the ProgID of the highest available version of the // Microsoft XML parser. //// Parameters: None //// Returns: String (i.e. "Msxml2.DOMDocument.4.0") //// -------------------------------------------------------------------- function GetXmlParserProgID(){ var MAX_MAJOR_PARSER_VERSION = 10 ; var MIN_MAJOR_PARSER_VERSION = 0 ; var MAX_MINOR_PARSER_VERSION = 9 ; var MIN_MINOR_PARSER_VERSION = 0 ; var sProgID = g_sXmlParserProgID; var bFound = false ; if ( ! sProgID) {  // Iterate through possible versions   for ( var nMajor = MAX_MAJOR_PARSER_VERSION; nMajor >= MIN_MAJOR_PARSER_VERSION; nMajor -- )  {   for ( var nMinor = MAX_MINOR_PARSER_VERSION; nMinor >= MIN_MINOR_PARSER_VERSION; nMinor -- )   {    // Set up the classname for the version that we're trying to instantiate     sProgID = " Msxml2.DOMDocument. " nMajor " . " nMinor;    try     {      if ( new ActiveXObject(sProgID))      {      bFound = true ;      break ;     }     }     catch (e)    {}    }    if (bFound)   {    // store in a global variable to speedup subsequent calls     g_sXmlParserProgID = sProgID;    break ;   }   }  }  return sProgID;}   然后直接用其load方法(本地)。 var xmlDoc = new ActiveXObject( " MSXML2.DOMDocument.3.0 " );xmlDoc.load(local_XML_FileName);  当然也可以直接从server取来(用get方法即可),然后以responseText的方法 xmlht.Open( " GET " ,server_XML_FileName, true );xmlht.onreadystatechange = stateChange;xmlht.Send( null );function handleStateChange() { if (xmlHttp.readyState == 4 ) {  if (xmlHttp.status == 200 ) {   xmlDoc.loadXML(xmlht.responseText);  }  } }   实际上xmlDoc.loadXML(xmlht.responseText)所得到的就是一个于内存中的DOM了,而直接用responseXML的话就直接可以解析为一个DOM了!(注意load(FILE)与loadXML(DOM)是不同的)  此时servert process : import java.io. * ;import javax.servlet. * ;import javax.servlet.http. * ;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class PostingXMLExample extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String xml = readXMLFromRequestBody(request);Document xmlDoc = null ;try {xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( new ByteArrayInputStream(xml.getBytes()));} catch (ParserConfigurationException e) {System.out.println( " ParserConfigurationException: " e);} catch (SAXException e) {System.out.println( " SAXException: " e);} /**/ /* Note how the Java implementation of the W3C DOM has the same methods* as the JavaScript implementation, such as getElementsByTagName and * getNodeValue.*/ NodeList selectedPetTypes = xmlDoc.getElementsByTagName( " type " );String type = null ;String responseText = " Selected Pets: " ;for ( int i = 0 ; i < selectedPetTypes.getLength(); i ) {type = selectedPetTypes.item(i).getFirstChild().getNodeValue();responseText = responseText " " type;} response.setContentType( " text/xml " );response.getWriter().print(responseText);} private String readXMLFromRequestBody(HttpServletRequest request) {StringBuffer xml = new StringBuffer();String line = null ;try {BufferedReader reader = request.getReader();while ((line = reader.readLine()) != null ) {xml.append(line);} } catch (Exception e) {System.out.println( " Error reading XML: " e.toString());} return xml.toString();} }   DOM,JDOM,JAXP随便你自己选好了! 下载本文示例代码


AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信AJAX编程实践之与服务器通信
阅读(159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~