2011-11-23 82 views
0

我同時學習AJAX和Java Servlet API(以及Spring MVC,它基於,基於),並且相信我理解了大部分基礎知識,除非在瞭解HttpServletResponse當服務器/ Servlet響應HTTP GET/POST(與正常頁面請求相對應)而不是基於AJAX的XmlHttpRequest時,結構化/組織/填充的方式不同。AJAX與Java:HttpServletResponse如何受影響?

在我看來,在沒有AJAX的情況下,每個HttpServletResponse都只包含頁面的完整HTML(加上header/metadat/etc。info)。通過AJAX,異步XmlHttpRequests可用於更新特定頁面內特定的組件。因此,如果我理解HTTP和Servlet正確,爲http://www.example.com/some-page.html請求可能導致包含了以下機身的HttpServletResponse的:

<html> 
    <header><title>Title of the page</title></header> 
    <body> 
     <!-- Some massive amount of HTML --> 

     <a href="./foo.html">This is a link</a> 

     <!-- Lots more HTML --> 
    </body> 
</html> 

然而,隨着AJAX請求,不知何故HttpServletRequest的可能發回的信息,使得鏈路(從上面的例子)現在呈現到這一點:

<a href="./bar.html">This is a new link that point to bar</a> 

我的問題是:怎樣的Java Servlet的結構HttpServletRequests同時處理整頁的請求以及可能只會產生改變頁面的部分AJAX請求?

作爲一個類似但又相互獨立的問題,客戶端(瀏覽器)知道如何使用HTTP Responses(由Servlet發回),並渲染整個新頁面或只更新頁面的一小部分。

在此事先感謝您的任何澄清。

+0

相關:http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax – BalusC

回答

1

我瞭解最基礎知識,當談到 瞭解HttpServletResponse的是如何 結構化/組織/填充不同的時候,除了服務器/ Servlet是 響應HTTP GET/POST(就像它與正常頁面 請求一樣),而不是基於AJAX的XmlHttpRequest。

我認爲您的困惑源於將AJAX請求和非AJAX請求視爲根本性不同。首先,瞭解AJAX是什麼非常重要。從wikipedia

儘管名字,不需要使用XML(JSON經常被用來代替 ),並且請求不需要是異步的。

我還會補充說,除JavaScript之外的其他一些瀏覽器腳本語言也可以用來代替。所以這個名字告訴你什麼都沒有。 「AJAX」基本上意味着HTTP請求正在從瀏覽器中的腳本中被踢出,而不是來自某人在地址欄中輸入URL的請求。

因此,生成HTTP請求的腳本代碼可能會選擇處理服務器發送的任何HTTP響應,或者可以忽略它。如何生成請求 - 「AJAX」或非「AJAX」不需要與返回的HTTP響應有關。

0

Ajax請求在服務器端(基本上)沒有區別:返回的內容由URL,參數,內容類型等決定。可以使用這些的任意組合來確定返回的數據。

來自客戶端的Ajax請求(通常)是由Web應用程序開發人員專門創建的。因此,響應處理程序將知道如何處理返回的數據,無論是HTML(如上所示),JSON,XML等。

0

嗯,我認爲你需要的不是如何servlet響應你,但是你如何處理它在ajax請求回調中的響應,最簡單的方法是通過JSON,XML或者像你的servlet給你的鏈接那樣簡單的字符串來處理它...

如果您已經定義了一個ID標籤爲您<a>,像

<html> 
    <body> 
      <a href="" id="myLink">click here!</a> 
    </body> 
</html> 

然後在你的回調函數(ONR XMLHttpRequest對象的eadystatechange功能),你應該做這樣的事情:

retreq.onreadystatechange=function() 
    if (retreq.readyState==4){ 
     if(retreq.status==200){ 
      if(document.getElementById(idelemento)!=null){ 
        document.getElementById("myLink").href=retreq.responseText; 
      } 
     } 
    } 
}