Étendre la librairie de balise struts
Il est souvent très utile d’ajouter des fonctionnalité aux librairies fournies avec les plate-formes de développement. Voici un exemple d’extension qui peut être utile dans un projet utilisant Struts[en].
Supposons que nous voulons (pour une raison ou un autre) empècher certains agents utilisateur ne respectant pas les entêtes http d’utiliser leur cache. Une manière que règle en partie ce problème, est de générer des urls différents à chaque requête. Nous allons pour ce faire créer une extension de la librairie de balise struts-html, ou plus spécifiquement, de la balise html:link de cette librairie. Cette balise génère les urls pour les applications struts.
Première étape: créer notre propre librairie de balise
Pour les besoins de cet exemple, appelons-là toto. Nous devrons créer le fichier toto-html.tld à mettre dans le répertoire /WEB-INF/taglibs de notre projet. Celui-ci contient une copie de la définition de la balise html:link contenu dans le fichier struts-html.tld, puisque notre balise réagira aux mêmes paramêtres. Voici le contenu abrégé de toto-html.tld:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.2</tlibversion> <jspversion>1.1</jspversion> <shortname>toto-html</shortname> <uri></uri> <tag> <name>link</name> <tagclass>com.toto.web.taglib.HtmlLinkTag</tagclass> <attribute> <name>accesskey</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute>...
Noter le nom de la classe qui sera l’extension de la classe org.apache.struts.taglib.html.LinkTag de fournie par struts.
Deuxième étape: modifier web.xml
Ajouter ceci dans le fichier web.xml pour lier notre librairie de balise à notre application:
<taglib> <taglib-uri>/tags/toto-html</taglib-uri> <taglib-location>/WEB-INF/taglibs/toto-html.tld</taglib-location> </taglib>
3e étape: Modifier les jsp
Il sera nécessaire d’ajouter <%@ taglib uri= »/tags/toto-html » prefix= »toto-html » %> aux entêtes des jsp qui utiliserons la librairie. L’appel se fera de cette manière : <toto-html:link action= »/toto.do »>Toto test</toto-html:link>
4e étape: Créer la classe com.toto.web.taglib.HtmlLinkTag
package com.toto.web.taglib; import org.apache.struts.taglib.html.LinkTag; import javax.servlet.jsp.JspException; import java.util.Date; public class HtmlLinkTag extends LinkTag { private static final long serialVersionUID = -3652461908592216904L; protected String calculateURL() throws JspException { String strutsURL = super.calculateURL(); String timeStamp = (new Long((new Date()).getTime()).toString()); if (strutsURL.indexOf("?")>0) { return strutsURL + "&t=" + timeStamp; } else { return strutsURL + "?t=" + timeStamp; } } }
Cette classe n’extensionne que la méthode calculateURL qui génère les urls. Nous ajoutons ici à la fin de l’url un paramètre (le nombre de secondes depuis 1970) qui devrait empècher certains agents utilisateurs d’utiliser leur cache.
Il est évident qu’il sera possible d’améliorer cette méthode, car elle ne couvre pas tout, mais elle est un bon exemple d’extension d’une libairie de balise de struts