<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA

    人生若只如初見,何事秋風悲畫扇。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks

    首先看下看下相對簡單些的--向服務器發送一個包含有名/值對的簡單查詢串

    在這種情況下XHP即可以用GET也可以用POST。

    GET

    function ?doRequestUsingGET()? {
    ????createXMLHttpRequest();
    ????
    ????
    var ?queryString? = ? " GetAndPostExample? " ;
    ????queryString?
    = ?queryString? + ?createQueryString()?
    ????????
    + ? " &timeStamp= " ? + ? new ?Date().getTime();
    ????xmlHttp.onreadystatechange?
    = ?handleStateChange;
    ????xmlHttp.open(
    " GET " ,?queryString,? true );
    ????xmlHttp.send(
    null );
    }


    POST

    function ?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? = ? " <pets> " ;
    ????
    ????
    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? + ? " <type> " ? + ?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隨便你自己選好了!

    參考資料:foundations-of-ajax

    相關鏈接: Ajax---通過JSON與服務器通信(發送請求和處理響應)

    posted on 2006-03-29 15:04 Jkallen 閱讀(3940) 評論(0)  編輯  收藏 所屬分類: AJAX
    主站蜘蛛池模板: 九九免费精品视频在这里| 成人午夜免费福利| 亚洲中文无韩国r级电影| 国产精品亚洲四区在线观看 | 免费做爰猛烈吃奶摸视频在线观看| 亚洲综合无码一区二区| 久久永久免费人妻精品下载| 国产午夜无码片免费| 亚洲日韩精品无码一区二区三区| a级毛片免费网站| 亚洲熟妇丰满多毛XXXX| 日本视频在线观看永久免费| 亚洲国产天堂久久综合网站| 久久精品国产亚洲av麻| 亚洲国产系列一区二区三区| 好吊妞在线成人免费| 激情无码亚洲一区二区三区| 夜色阁亚洲一区二区三区| 一级毛片免费一级直接观看| 亚洲精品无码精品mV在线观看| 日本一道本不卡免费 | 亚洲欧美日韩中文字幕在线一区| 麻豆国产精品入口免费观看| 黄网站色成年片大免费高清 | 亚洲神级电影国语版| 久久久www成人免费毛片| 美女裸体无遮挡免费视频网站| 国产午夜亚洲不卡| 最近2019年免费中文字幕高清| 亚洲日韩AV一区二区三区四区| 又粗又硬免费毛片| 四虎影视成人永久免费观看视频 | 美女无遮挡拍拍拍免费视频| 久久久久亚洲精品天堂| 成人免费在线视频| 国产免费牲交视频免费播放| 亚洲另类春色国产精品| 亚洲精品国产精品乱码不卞| 99久热只有精品视频免费看| 亚洲AV第一成肉网| 亚洲AV无码久久|