La precisión de getLastModified para Servlets
Disclaimer: esto es un rollo patatero solo aplicable para aquellos que desarrollen aplicaciones web a nivel bastante bajo (quiero decir conociendo las cabeceras y demás). Recomendable saltarse este post para quien no viva esa vida loca.
Siempre que me pasa algo así me parece fantástico. De verdad, no es ironia. Llevo ya no se cuantos años desarrollando aplicaciones web en Java (desde que NO existian los JSP, que ya es decir). He usado el getLastModified() como un mecanismo para aumentar el rendimiento de mis aplicaciones durante un montón de años. Es un viejo truco muy efectivo que además llevo también años explicando en el Master. Pero resultado que me faltaba un detalle por aprender… ¡y muy importante!
Resumiendo una historia de día y medio de investigación: tenia un servlet que utilizaba dicho método para hacer buen uso de las caches. Pero lo hacia de manera que la resolución de la respuesta era de milisegundos. Bien, no deberia ser un problema ya que de hecho el método ha de devolver justamente milisegundos. Así que vamos bien. El problema es que las cabeceras de HTTP tienen una resolución de segundos así que… vamos, la cosa no acaba de ajustar.
No os voy a aburrir con los detalles técnicos porque ya los he escrito en el foro de java.net además de enlazar a una estupenda explicación de un libro sobre Servlets.
Moraleja: al usar el método getLastModified() redondea siempre a segundos.
Actualización 23/8/2011: Actualizo enlace a foros de java.net que, tras la compra por parte de Oracle, se han perdido todos los enlaces originales. Una gran maniobra, bravo Oracle!