2011-11-23 30 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; 
      } 
     } 
    } 
}