Alcance de contexto Servlet vs variable global

¿Cuál (si existe) es la diferencia entre almacenar una variable en el ServletContext y tenerla como miembro estático público de una de las clases?

En lugar de escribir:

// simplified (!)
int counter = (Integer)getServletContext().getAttribute("counter");
counter++;
this.getServletContext().setAttribute("counter", counter);

¿Por qué no solo tener:

// in class MyServlet
public static int counter = 0;

// in a method somewhere
MyServlet.counter++;

(Ignore los problemas de concurrencia, por favor, esto es solo un ejemplo tonto)

Por lo que puedo decir, estas dos opciones se comportan de la misma manera en Tomcat. ¿Hay algo mejor sobre el uso de la primera opción?

Respuestas a la pregunta(2)

Su respuesta a la pregunta