[java] Quelle est la différence entre inclure des fichiers avec une directive JSP include, inclure une action JSP et utiliser des fichiers JSP Tag?


Answers

Question en double possible

<@include> - La balise directive indique au compilateur JSP de fusionner le contenu du fichier inclus dans la JSP avant de créer le code de servlet généré. C'est l'équivalent de couper et coller le texte de votre page d'inclusion directement dans votre JSP.

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

<jsp:include> - D'autre part, la balise JSP Action indique au conteneur de suspendre l'exécution de cette page, d'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 lors de l'exécution. Ceci est souvent utile pour les structures de modèles qui construisent des pages hors des inclusions. 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 include.
  • La page incluse doit pouvoir être utilisé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>

Question

Il semble qu'il existe deux méthodes pour modéliser avec JSP. Y compris les fichiers avec l'un de ces énoncés

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

ou en utilisant des fichiers de balises 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 avec

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

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

Alors, quelle méthode dois-je utiliser? L'un est-il maintenant considéré comme obsolète ou sont-ils tous deux valables et couvrent-ils différents cas d'utilisation?

modifier

Est-ce que l'utilisation de ce fichier de balise n'est pas la même que l'utilisation d'un include?

// 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 une 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 le même que d'utiliser un paramètre include et passing. Les fichiers Tag sont-ils les mêmes que ceux inclus?




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

Avec <@include> , l'analyseur JSP <@include> le contenu du fichier inclus dans le JSP avant la compilation (similaire à un C #include ). Vous pouvez utiliser 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 devient une partie de la JSP compilée et il n'y a pas de coût supplémentaire à l'exécution.

<jsp:include> (et <c:import> 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 beans en conflit avec la page incluse. <c:import> vous permet également de stocker le texte inclus dans une variable, que vous pouvez ensuite manipuler ou réutiliser. Les deux entraînent un coût d'exécution supplémentaire pour l'envoi: cela est minime, mais vous devez savoir que l'inclusion dynamique n'est pas "gratuite".

Utilisez des fichiers de balise lorsque vous souhaitez créer des composants d'interface utilisateur réutilisables. Si vous avez une liste de widgets, disons, et que vous voulez parcourir les Widgets et afficher les propriétés de chacun (dans une table ou dans un formulaire), vous créez 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 la méthode.

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




Related