Archives par mot-clé : lastModified

Forcer le rechargement Javascript ou CSS

Parfois, un développeur peut éprouver quelques difficultés à forcer le rechargement d’une partie du site Web, sans pour autant ignorer le cache du navigateur.

Bien souvent, Internet Explorer pour n’en citer qu’un (mais sans doute le pire), continue de se baser sur une version obsolète d’un fichier Javascript, car présent dans son cache, ce parfois même en tentant de rafraîchir à grands coups de F5.

Pour forcer le navigateur à recharger un fichier fraîchement mis à jour, il suffit en fait de modifier son URL, en ajoutant un attribut derrière le « ? ». Dans ce cas, pourquoi ne pas se baser sur la date de modification du-dit fichier pour générer cet attribut ? C’est justement ce que le bout de code ci-dessous permet de faire depuis une JSP.

<%
	final String CSS = "css/main.css";
	final String JS = "js/main.js";
	final String ABSOLUTE_PATH = request.getSession().getServletContext().getRealPath(".") + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR">
<head>
	<title>Date de modification d'un fichier depuis une JSP</title>
	<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
	<meta http-equiv="content-language" content="fr-FR" />
	<meta name="language" content="fr-FR" />
	<link rel="stylesheet" type="text/css" href="<%= CSS + "?" + (new java.io.File(ABSOLUTE_PATH + CSS)).lastModified() %>" />
	<script type="text/javascript" src="<%= JS + "?" + (new java.io.File(ABSOLUTE_PATH + JS)).lastModified() %>"></script>
...

Attention ! Si votre page Web est présente dans un sous-répertoire de la racine du site, pensez à ajouter ce sous-répertoire derrière le slash final dans la constante ABSOLUTE_PATH, comme ceci : / --> /sous-repertoire/
Dans le cas contraire, aucune Exception ne sera provoquée lors de l’exécution du Servlet, mais la méthode lastModified() se contentera de retourner 0 pour un fichier qui n’a tout simplement pas été trouvé.