Веб-приложение на Java: как реализовать веб-баг (1x1 пиксель)? - PullRequest
4 голосов
/ 10 июня 2010

В принятом ответе на следующий вопрос регулярный представитель SO с представителем 13K + предлагает использовать «веб-баг» (не кэшируемый 1x1 img), чтобы иметь возможность отслеживать запросы в журналах:

Является ли Google Analytics точной?

Как я могу сделать это на 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?

Что / где искать в логах?

1 Ответ

6 голосов
/ 10 июня 2010

Простой метод - добавить метку даты к изображению в 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

При таком подходе вам не понадобится отображение сервлета.

Альтернативный подход будет включать в себя написание класса Filter для установки заголовков управления кэшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...