开发者

Java webapp: how to implement a web bug (1x1 pixel)?

In the accepted answer in the following question, a SO regular with 13K+ rep suggests to use a "web bug" (non-cacheable 1x1 img) to be able to track requests in the logs:

Is Google Analytics Accurate?

How can I do this in Java?

Basically, I've got two issues:

  • how to make sure the 1x1 image is not cacheable (how to set the header)?

  • how to make sure the query for these 1x1 image will appear in the logs?

I'm 开发者_JAVA技巧looking for exact piece of code because I know how to write a .jsp/servlet and I know how to serve an 1x1 image :)

My question is really about the exact .jsp/servlet that I should write and how/what needs to be done so that Tomcat logs the request.

For example I plan to use the following mapping:

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

and then use an img tag referencing a "webbug.png" (or .gif), so how do I write the .jsp/servlet?

What/where should I look for in the logs?


The simple method is to add the date timestamp to the image in the JSP. This will prevent the image from getting cached.

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

In your access logs, you can count for your jpg - the output should be

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

In this approach, you wont need the servlet mapping.

The alternate approach will involve writing a Filter class to set cache-control headers.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜