Meilleures pratiques de programmation JSP : Utiliser un mécanisme d'inclusion approprié
JSP prend en charge deux mécanismes d'inclusion : Inclusion statique et Inclusion dynamique.
- Inclusion statique
- La directive de l'inclusion statique fait en sorte que le contenu du fichier spécifié soit inséré textuellement dans le fichier, y compris au moment de la compilation, c'est-à-dire lorsque la page JSP est convertie en servlet Java. Les éléments JSP du fichier inclus sont donc effectivement visibles n'importe où dans la page JSP résultante et doivent avoir des noms uniques pour éviter les conflits de nom. Les conteneurs Web typiques sont incapables de détecter les modifications apportées au fichier inclus au moment de l'exécution et, par conséquent, le fichier inclus doit être mis à jour pour que les modifications prennent effet. La syntaxe de la directive statique est la suivante :
<%@ include file=" filename.jspf" %> - Inclusion dynamique
- Les actions d'inclusion dynamique incluent la réponse générée par l'exécution de la page spécifiée pendant la phase de traitement de la requête, c'est-à-dire lorsque la page incluse est demandée par l'utilisateur. Etant donné que ce qui est inclus est la response générée par la page, et non pas le content de la page elle-même, les variables de script déclarées dans le fichier inclus ne sont pas visibles ailleurs dans la page JSP résultante. Les modifications apportées au fichier inclus, par contre, sont transparentes pour le fichier d'inclusion. Deux alternatives existent pour l'inclusion dynamique :
- <c:import url=" filename.jsp"> … </c:import>
- <jsp:include page=" filename.jsp" flush=" true|false"> … </jsp:include>
Contrairement à jsp:include, l'action c:import fournit un mécanisme pour accéder aux ressources qui peuvent être spécifiées via une URL, permettant ainsi aux auteurs de pages d'accéder aux ressources qui résident en dehors de l'application Web. D'autre part, elle n'a pas la capacité de vider la réponse. Enfin, c:import est comparativement plus lourd et n'est donc pas approprié quand une solution légère est recherchée.
Important : Si votre site HCL Commerce utilise la mise en cache dynamique, vous devez vider la réponse. Pour ce faire :- Indiquez avant et après chaque action c:import un scriptlet <%out.flush();%>.
- Définissez flush="true" dans vos actions jsp:include.
Alors que l'inclusion dynamique inclut est plus flexible que l'inclusion statique, elle est moins efficace. Par conséquent, utilisez l'inclusion statistique dans la mesure du possible afin d'éviter les problèmes de performance.