在Java中访问Ajax参数

时间:2014-07-24 19:56:41

标签: java ajax http servlets

假设发送了以下http请求:

http://example.com#!&parm1=123

我想在Servlet中访问Java中param1的值。我怎样才能做到这一点?我知道 #!用于Ajax参数,但在这种情况下,请求转到Java Servlet,Servlet应该能够获取param1的值。

注意:大多数人都对此感到困惑。的!在hashbang中,意思是#!,取消哈希函数(#)。因此,param1会被发送,但我的问题是在Java Servlet中访问它

谢谢, 赛勒斯

1 个答案:

答案 0 :(得分:2)

#之后的url部分不一定与AJAX相关。它是文档哈希码或fragment identifier。现代AJAX模式确实使用此标识符作为存储参数和其他信息的位置。

重要的事实是,它永远不会发送到服务器。服务器可以发送带有片段的URL,但客户端从不将片段发送到服务器。

你需要解析url并在#之后提取值。然后,您可以使用GET或POST请求将它们发送到服务器,或者您可以发出ajax请求并传入参数。 This question有一些可用于解析哈希码的代码示例,假设它的格式类似于典型的GET查询(即,?p1 = v1& p2 = v2)。如果您使用框架进行应用程序开发,可能会有一个可用于此的内置函数,例如jquery BBQ。

#!语法是Google定义的约定:see here。当抓取工具遇到此语法时,它会使用参数_escaped_fragment_替换网址中的!#。所以像

这样的网址
  

http://stackoverflow.com#!p1=v1&p2=v2

变为

  

http://stackoverflow.com?_escaped_fragment_=p1%3Dv1%26p2%3Dv2

在您的服务器上,您可以像访问任何其他参数一样访问_escaped_fragment_参数。

注意:关于这个特定约定的重要一点是,它是网络爬行用户代理(即Googlebot)重写网址以使用_escaped_fragment_。如果您使用这些类型的网址,并希望使网站可以抓取,则应支持阅读_escaped_fragment_参数。如果您不关心Googlebot这些特定页面,那么整个约定对您来说都是无用的。无论哪种方式,处理哈希码中的参数都是客户端的责任。