2010-06-10 69 views
4

在以下问题,带13K +代表SO定期接受的答案建议使用“网络臭虫”(不可缓存的1x1 IMG),以能够跟踪在日志请求:Java webapp:如何实现一个网络bug(1x1像素)?

Is Google Analytics Accurate?

如何在Java中执行此操作?

基本上,我有两个问题:

  • 如何确保1x1的图像不缓存(如何设置头)?

  • 如何确保这些1x1图像的查询将出现在日志中?

我要找的代码的确切一块,因为我知道如何写的.jsp/servlet和我知道如何成为一个1x1图片:)

我的问题实际上是关于确切。我应该写的jsp/servlet以及如何/需要做什么以便Tomcat记录请求。

例如我打算使用下面的映射:

<servlet-mapping> 
     <servlet-name>WebBugServlet</servlet-name> 
     <url-pattern>/webbug*</url-pattern> 
</servlet-mapping> 

,然后使用IMG标签引用“webbug.png”(或.gif),所以我如何写的.jsp/servlet的?

什么/我应该在日志中寻找什么?

回答

6

简单的方法是将日期时间戳添加到JSP中的图像。这将防止图像被缓存。

<% 
java.util.Date dt = new java.util.Date(); 
%> 
<img src="/invisible.jpg?<%=dt.getTime()%>" width="1" height="1"> 

在你的访问日志,你可以指望你的JPG - 输出应该是

127.0.0.1 - - [10/Jun/2010:11:38:53 +0530] "GET /mywebapp/jsp/invisible.jpg?1276150133362 HTTP/1.1" 200 991 
127.0.0.1 - - [10/Jun/2010:11:38:54 +0530] "GET /mywebapp/jsp/invisible.jpg?1276150134659 HTTP/1.1" 200 991 
127.0.0.1 - - [10/Jun/2010:11:38:55 +0530] "GET /mywebapp/jsp/invisible.jpg?1276150135627 HTTP/1.1" 200 991 

在这种方法中,你不会需要servlet映射。

另一种方法将涉及编写一个Filter类来设置缓存控制标题。