Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何计算Grails中的唯一请求?_Spring_Servlets_Grails_Grails 2.0_Grails Controller - Fatal编程技术网

Spring 如何计算Grails中的唯一请求?

Spring 如何计算Grails中的唯一请求?,spring,servlets,grails,grails-2.0,grails-controller,Spring,Servlets,Grails,Grails 2.0,Grails Controller,给定一个如下定义的控制器操作测试()。我可以访问请求并获得IP以及用户代理。我想计算访问test()的请求数。这很简单,我会在每个请求上增加一个计数器 我的问题是如何计算唯一的请求?也就是说,我只想计算一次来自同一台计算机的请求。除了存储所有ip地址和用户代理以查看它们是否已经发生之外,还有其他方法吗 def test() { println "ip: "+request.getRemoteAddr() println "user agent: "+request.getHeader("

给定一个如下定义的控制器操作测试()。我可以访问请求并获得IP以及用户代理。我想计算访问test()的请求数。这很简单,我会在每个请求上增加一个计数器

我的问题是如何计算唯一的请求?也就是说,我只想计算一次来自同一台计算机的请求。除了存储所有ip地址和用户代理以查看它们是否已经发生之外,还有其他方法吗

def test() {
  println "ip: "+request.getRemoteAddr()
  println "user agent: "+request.getHeader("User-Agent")

}

您可以创建一个新的域类,如下所示:

class RequestCount {
   String ip
   String userAgent
}

然后在每个请求上保存一个新对象。数一数唯一条目的数量,您的任务就完成了。

显然,解决这个问题的办法是创建一个域或在现有域上添加一个集合。这是你考虑过但没有实现的原因吗?@JamesKleeh这是保存每个请求ip和用户代理的唯一方法吗?这将花费大量的数据库空间。这取决于您需要如何处理此计数。如果它需要长时间保持并在重启等情况下生存,那么您需要将信息保持在某个地方,比如数据库。如果是暂时的,那么你可能想做一些事情,比如让一个单例Springbean跟踪IP并将计数与之关联,然后编写一个简单的过滤器,识别符合条件的请求并相应地更新bean。如果你真的不需要全局跟踪它们,只需要访问计数在一个会话中,让一个过滤器与会话交互可能非常简单。