web-dev-qa-db-fra.com

Quelle est la différence entre l'inclusion de fichiers avec la directive d'inclusion JSP, l'action d'inclusion JSP et l'utilisation de fichiers de balises JSP?

Il semble qu'il existe deux méthodes pour créer des modèles avec JSP. Y compris les fichiers avec l'une de ces déclarations

<%@ include file="foo.html" %>
<jsp:include page="foo.html" />

ou en utilisant des fichiers de balise JSP

// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <jsp:doBody/>
</body>
</html>

Et dans une autre page JSP, appelez-le avec

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:mytag>
    <h1>Hello World</h1>
</t:mytag>

Alors, quelle méthode dois-je utiliser? Est-ce que l'un d'entre eux est maintenant considéré comme obsolète ou est-il valide et couvre-t-il différents cas d'utilisation?

Éditer

Est-ce que l’utilisation de ce fichier de balises n’est pas identique à l’utilisation d’un inclus?

// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>

Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>

Et appelez-le sur un autre JSP avec

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:product>
    <c:forEach items="${cart.products}" var="product">
        <t:product product="${product}"/>
    </c:forEach>
</t:product>

Cela me semble être la même chose que d’utiliser un paramètre d’inclusion et de lui transmettre des paramètres. Les fichiers de balises sont-ils les mêmes que ceux inclus?

150
sonicboom

Il existe plusieurs mécanismes de réutilisation du contenu dans un fichier JSP.

Les 4 mécanismes suivants pour inclure du contenu dans JSP peuvent être classés en deux catégories: , réutilisation directe :
(pour les 3 premiers mécanismes citant "Head First Servlets and JSP" )

1) La directive include:

<%@ include file="header.html" %>

Static : ajoute le contenu de la valeur de l'attribut de fichier à la page actuelle au moment de la traduction . La directive était à l'origine destinée aux modèles de présentation statiques, tels que les en-têtes HTML.

2) L'action standard <jsp:include>:

<jsp:include page="header.jsp" />

Dynamique : ajoute le contenu de la valeur de l'attribut de page à la page actuelle au moment de la demande . A été destiné plus pour le contenu dynamique provenant de JSP.

3) La balise <c:import> JSTL:

<c:import url=”http://www.example.com/foo/bar.html” />

Dynamique : ajoute le contenu de la valeur de l'attribut d'URL à la page en cours, au moment de la demande . Cela fonctionne beaucoup comme <jsp:include>, mais il est plus puissant et flexible: contrairement aux deux autres inclus, l'URL <c:import> peut être de l'extérieur du Web. Container !

4) Préludes et codas:

Static : les préludes et les codas peuvent être appliqués uniquement au début et à la fin des pages .
Vous pouvez implicitement inclure des préludes (également appelés en-têtes) et des codas (également appelés bas de page) pour un groupe de Pour ajouter des pages JSP en ajoutant les éléments <include-prelude> et <include-coda>, respectivement dans un élément <jsp-property-group> de l'application Web web.xml . Lire la suite ici:
Configuration des inclusions implicites au début et à la fin des JSP
Définition des inclus implicites


Le fichier de balise est une méthode indirecte de réutilisation de contenu, la manière de encapsulant un contenu réutilisable . Un fichier de balise est un fichier source contenant un fragment de code JSP réutilisable en tant que balise personnalisée .

Le BUT de includes et Tag Files est différent.

Le fichier de balise (un concept introduit avec JSP 2.0) est l’une des options pour créer des tags personnalisés . C'est un moyen plus rapide et plus simple de construire des balises personnalisées . Les balises personnalisées , également appelées extensions de balises, sont des éléments JSP qui permettent une logique et une sortie personnalisées fournies par d'autres Java composants à insérer dans les pages JSP. La logique fournie via une balise personnalisée est implémentée par un objet Java connu sous le nom de gestionnaire de balise .

Parmi les exemples de tâches pouvant être exécutées par des balises personnalisées, citons les opérations sur des objets implicites, les formulaires de traitement, l'accès aux bases de données et d'autres services d'entreprise tels que la messagerie et les annuaires, et la mise en œuvre du contrôle de flux.


Concernant votre édition

Peut-être que dans votre exemple (dans votre Edit ), il n'y a aucune différence entre utiliser l'inclusion directe et un fichier de balise. Mais les balises personnalisées ont un riche ensemble de fonctionnalités . Ils peuvent

  • Être personnalisé au moyen d'attributs transmis de la page d'appel.

  • Renvoyer les variables à la page appelante.

  • Accédez à tous les objets disponibles pour les pages JSP.

  • Communiquer entre vous. Vous pouvez créer et initialiser un composant JavaBeans, créer une variable EL publique qui fait référence à ce bean dans une balise, puis utiliser le bean dans une autre balise.

  • Être imbriqués les uns dans les autres et communiquer au moyen de variables privées.

Lisez également ceci dans "Pro JSP 2": Comprendre les balises personnalisées JSP .


Lecture utile.


Conclusion

Utilisez les bons outils pour chaque tâche.


Utilisez les fichiers de balises comme moyen rapide et facile de créer balises personnalisées pouvant vous aider à encapsuler du contenu réutilisable .

En ce qui concerne le contenu inclus dans JSP (citation de ici ):

  • Utilisez la directive include si le fichier change rarement . C’est le mécanisme le plus rapide. Si votre conteneur ne détecte pas automatiquement les modifications, vous pouvez les forcer à prendre effet en supprimant le fichier de classe de la page principale.
  • Utilisez l'action d'inclusion uniquement pour le contenu qui change souvent et si la page à inclure ne peut pas être décidée. jusqu'à ce que la page principale soit demandée.
281
informatik01

Question possible en double

<@include> - La balise de directive demande au compilateur JSP de fusionner le contenu du fichier inclus dans le JSP avant de créer le code de servlet généré. Cela équivaut à couper et coller le texte de votre page d'inclusion directement dans votre JSP.

  • Un seul servlet est exécuté au moment de l'exécution.
  • Les variables de scriptlet déclarées dans la page parente sont accessibles dans la page incluse (rappelez-vous que ce sont la même page).
  • La page incluse ne doit pas nécessairement être compilée en tant que JSP autonome. Il peut s'agir d'un fragment de code ou d'un texte brut. La page incluse ne sera jamais compilée en autonome. La page incluse peut également avoir n'importe quelle extension, bien que .jspf soit devenue une extension utilisée de manière conventionnelle.
  • Un inconvénient des anciens conteneurs est que les modifications apportées aux pages d'inclusion peuvent ne pas prendre effet avant la mise à jour de la page parent. Les versions récentes de Tomcat vérifieront les mises à jour des pages d'inclusion et forceront une recompilation du parent si elles sont mises à jour.
  • Un autre inconvénient est que, puisque le code est directement inséré dans la méthode de service du servlet généré, la méthode peut devenir très volumineuse. S'il dépasse 64 Ko, votre compilation JSP échouera probablement.

<jsp:include> - La balise d'action JSP, quant à elle, indique au conteneur de suspendre l'exécution de cette page, d'aller exécuter la page incluse et de fusionner la sortie de cette page dans la sortie de cette page.

  • Chaque page incluse est exécutée en tant que servlet distinct au moment de l'exécution.
  • Les pages peuvent être conditionnellement incluses au moment de l'exécution. Cela est souvent utile pour les modèles de frameworks qui construisent des pages à partir de includes. La page parent peut déterminer quelle page, le cas échéant, inclure en fonction de certaines conditions d'exécution.
  • Les valeurs des variables de scriptlet doivent être explicitement passées à la page d'inclusion.
  • La page incluse doit pouvoir être exécutée seule.
  • Vous risquez moins de rencontrer des erreurs de compilation en raison du dépassement de la taille maximale de la méthode dans la classe de servlet générée.

Selon vos besoins, vous pouvez utiliser <@include> ou <jsp:include>

21
Darth

Le principal avantage de <jsp:include /> par rapport à <%@ include > est:

<jsp:include /> permet de passer des paramètres

<jsp:include page="inclusion.jsp">
    <jsp:param name="menu" value="objectValue"/>
</jsp:include>

ce qui n'est pas possible dans <%@include file="somefile.jsp" %>

8
Saurabh Ande

Les trois options de modèle - <%@include>, <jsp:include> et <%@tag> sont valides et les trois couvrent des cas d'utilisation différents.

Avec <@include>, l’analyseur JSP insère le contenu du fichier inclus dans le JSP avant la compilation (semblable à un C #include). Vous utiliseriez cette option avec un contenu simple et statique: par exemple, si vous souhaitez inclure des éléments d'en-tête, de pied de page ou de navigation dans chaque page de votre application Web. Le contenu inclus fait partie du fichier JSP compilé et ne génère aucun coût supplémentaire au moment de l'exécution.

<jsp:include> (et <c:import> de JSTL, qui est similaire et encore plus puissant) sont les mieux adaptés au contenu dynamique. Utilisez-les lorsque vous devez inclure du contenu provenant d'une autre URL, locale ou distante. lorsque la ressource que vous incluez est elle-même dynamique; ou lorsque le contenu inclus utilise des variables ou des définitions de bean en conflit avec la page d'inclusion. <c:import> vous permet également de stocker le texte inclus dans une variable, que vous pouvez manipuler ou réutiliser ultérieurement. Ces deux opérations entraînent un coût d’exécution supplémentaire pour l’envoi: il est minime, mais vous devez savoir que l’inclusion dynamique n’est pas "gratuite".

Utilisez des fichiers de balises lorsque vous souhaitez créer des composants d'interface utilisateur réutilisables. Par exemple, si vous avez une liste de widgets et que vous souhaitez parcourir les widgets et afficher les propriétés de chacun (dans un tableau ou dans un formulaire), vous devez créer une balise. Les balises peuvent prendre des arguments, en utilisant <%@tag attribute> et ces arguments peuvent être obligatoires ou facultatifs - un peu comme les paramètres de méthode.

Les fichiers de balises constituent un mécanisme plus simple d’écriture de bibliothèques de balises, basé sur JSP, que vous deviez écrire (avant JSP 2.0) à l’aide de code Java. Il est beaucoup plus simple d'écrire des fichiers de balises JSP lorsqu'il y a beaucoup de rendu à effectuer dans la balise: vous n'avez pas besoin de mélanger Java et du code HTML comme vous le feriez si vous écriviez vos balises. en Java.

5
Hari

Java Revisited

  1. La directive ressource incluse par include est chargée pendant le temps de traduction de jsp, tandis que l'action ressource incluse par include est chargée pendant le temps de requête.
  2. Toute modification de la ressource incluse ne sera pas visible dans le cas d'une directive include jusqu'à ce que le fichier jsp soit à nouveau compilé. Alors que dans le cas d'une action include, toute modification de la ressource incluse sera visible dans la prochaine requête.
  3. La directive include est une importation statique, tandis que l'action include est une importation dynamique
  4. La directive Include utilise un attribut de fichier pour spécifier la ressource à inclure tout en incluant un attribut de page d'utilisation d'action dans le même but.