Nous savons tous qu'il existe deux formes d'inclusion dans jsp, à savoir
<%@include file=" "%>
<jsp:include page=” ” flush=”true”/></P>
Le premier est un élément d’instruction et le second est un élément comportemental. Où seront-ils utilisés exactement ? Comment les utiliser et quelle est la différence ? Cela devrait être une question à laquelle beaucoup de gens penseront lorsqu’ils le verront. Jetons un coup d'œil ci-dessous. </P>
Habituellement, lorsque certaines parties de toutes les pages de l'application (telles que les titres, les pieds de page et les barres de navigation) sont identiques, nous pouvons envisager d'utiliser include. Plus précisément, quand utiliser <%@ include file=""%> et quand utiliser <jsp:include page="" flush="true"/> Ce formulaire. La première chose à comprendre est la différence entre eux. Ce n’est qu’en comprenant les différences dans leur utilisation que vous pourrez comprendre quand les utiliser et comment choisir.
<%@ include file=" ”%>, l’élément de directive jsp include lit le contenu de la page spécifiée. Et intégrez ces contenus à la page originale. (Ce processus est effectué lors de l'étape de traduction : c'est-à-dire l'étape de conversion du jsp en servlet.</P>
Voici une explication de l'étape de traduction : Nous savons que la page jsp ne peut pas être envoyée intacte au navigateur, et que tous les éléments jsp doivent d'abord être traités par le serveur. Cela se fait en convertissant la page jsp en servlet puis en exécutant le servlet. Le serveur a besoin d'un conteneur jsp pour traiter les pages jsp. Le conteneur jsp est généralement implémenté sous la forme d'un servlet. Ce servlet est configuré pour gérer toutes les requêtes de pages jsp. </P>
Le conteneur Jsp est responsable de la conversion de la page jsp en un servlet (appelé classe d'implémentation de page jsp ? Classe d'implémentation de page JSP) et de la compilation de ce servlet. Ces deux étapes constituent l'étape de traduction.</P>
De cela, nous saurons : la page jsp ajoute le contenu réel (c'est-à-dire l'extrait de code) de la page spécifiée par l'élément de directive include à la page jsp qui l'introduit. Après avoir été synthétisée dans un fichier, elle est convertie en un fichier. servlet par le conteneur jsp. Vous pouvez voir qu'un fichier de classe temporaire et un fichier java seront générés à ce moment. Voici un exemple. </P>
Le serveur utilise Tomcat et le fichier jsp introduit dans la page s'appelle test.jsp. La page importée s'appelle date.jsp. Ce fichier jsp stocke un code jsp lié à l'heure et la racine du contexte actuel est définie pour tester.
//======Fichier source de date.jsp======//
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
Chaîne date_cn = "" ;
Chaîne dateStr = "" ;
commutateur (date.getDay())
{
cas 0:date_cn = "Jour" ; pause ;
cas 1 :date_cn = "一" ;
cas 2 :date_cn = "二" ; pause ;
cas 3 :date_cn = "三" ;
cas 4:date_cn = "四"; break;
cas 5 : date_cn = "五" ;
cas 6 : date_cn = "六" ; pause ;
}
dateStr = (1900+date.getYear()) + "Année" + (date.getMonth()+1) + "Mois" + date.getDate() + "Jour (jour de la semaine) + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======Ce qui suit est le fichier source de test.jsp=============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<tête>
<title>Deux utilisations de include</title>
<jsp:include page="date.jsp" flush="true"/>
<%--@ include file="date.jsp" %-->
//Nous utilisons ici deux formes différentes d'inclusion pour introduire le fichier date.jsp.
<tête>
<corps>
<table><tr><td>
Veuillez faire attention aux deux utilisations de include dans jsp.
</td></tr></table>
</corps>
</html></P>
Dans le fichier test.jsp, nous affichons uniquement une ligne de texte "À propos de deux utilisations de include dans jsp. Veuillez faire attention." Utilisons maintenant d'abord le formulaire <%@ include file="date.jsp" %> Introduisons le fichier date.jsp. Pensez-vous que quelque chose pourrait mal tourner ? Un message d'erreur apparaît à ce moment :
Statut HTTP 500 ?
org.apache.jasper.JasperException : /date.jsp(0,0) Directive de page : ne peut pas avoir plusieurs occurrences de contentType
Il y a un tas d’erreurs ci-dessous, mais il suffit d’y regarder pour voir où réside le problème. Le code d'état est Erreur interne du serveur http 500. Jetez un autre œil aux conseils ci-dessous. Plusieurs contentTypes ne peuvent pas être spécifiés dans la page date.jsp.</P>
Voici pourquoi. En effet, lors de la phase de traduction, le code du fichier date.jsp a été ajouté intact à la page test.jsp pour synthétiser un fichier. Le fichier synthétisé sera le même :
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
Ce code. La solution est de supprimer cette phrase dans le fichier date.jsp. Actualisez puis demandez la page test.jsp</P>
La requête test.jsp s'affiche sur la page comme suit
10 décembre 2003 13:12:40
Veuillez faire attention aux deux utilisations de include dans jsp. </P>
Nous ne trouvons encore rien. Vérifions les fichiers temporaires sous Tomcat. Allez-y et voyez si le contenu du fichier date.jsp a été ajouté au fichier test.jsp.
<Remarque. Le Tomcat ici est installé dans le répertoire racine du lecteur E>
Table des matières
E:tomcatworkStandalonelocalhosttest.
Dans ce répertoire, vous verrez
Il existe deux fichiers test_jsp.java et test_jsp.class. </P>
Le fichier java ici est le fichier test_jsp.java obtenu en convertissant jsp en servlet par le conteneur jsp. </P>
Le fichier test_jsp.class correspondant est le fichier de classe généré en compilant le fichier de servlet test_jsp.java. Ouvrez le fichier servlet généré (test_jsp.java). À ce stade, nous constaterons que lorsque le fichier test.jsp est converti en fichier servlet, du code qui ne se trouve pas dans la page test.jsp est ajouté entre la sortie <haed>. Le contenu nouvellement ajouté est le code en date. jsp : Veuillez tester et voir quel nouveau contenu a été ajouté ou si un nouveau contenu a réellement été ajouté. Cela sera clair en un coup d'œil, je n'entrerai pas dans les détails ici.</P>
Ce qui précède est le résultat que nous obtenons en utilisant le formulaire <%@ include file="date.jsp"%>.
Ensuite, nous utilisons <jsp:include page="dae.jsp" flush="true"/>, c'est-à-dire
Remplacez <%@ include file="date.jsp"%> par <jsp:include page="dae.jsp" flush="true"/>, puis demandez test.jsp.
2003?ê 12??10??
Veuillez faire attention aux deux utilisations de include dans jsp. </P>
À ce stade, vous verrez sur la page que les caractères chinois dans la date générée par le fichier date.jsp que nous avons introduit sont tronqués. Quelle en est la raison ? Il est nécessaire d'expliquer l'étape de traitement de la demande. En plus d'être responsable de la conversion des pages jsp en servlets comme mentionné ci-dessus, le conteneur Jsp est également chargé d'appeler la classe d'implémentation de la page jsp pour traiter chaque demande et générer une réponse. étape de traitement de la demande. L'étape de traitement de la demande exécute uniquement le fichier de classe). </P>
Ainsi, lorsque nous introduisons l'élément d'action include dans la page, nous faisons en fait référence uniquement au fichier de classe de servlet généré après la conversion et la compilation du fichier date.jsp. Dans ce cas, date.jsp est testé en tant que fichier distinct après son exécution. appelé lorsque le fichier .jsp est en cours d'exécution. Étant donné que le codage des caractères n'est pas spécifié dans le fichier date.jsp, des caractères tronqués apparaissent. La solution consiste à remplacer les caractères qui viennent d'être supprimés dans le fichier date.jsp.
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
Après avoir ajouté cette ligne d'instruction, actualisez et réexécutez. À ce moment, la page s'affiche correctement et est la même que lors d'une exécution normale avec la directive include. Si vous regardez les fichiers temporaires sous Tomcat, vous le constaterez. est un fichier date_jsp.java et un fichier date_jsp.class. Ces deux fichiers sont obtenus de la même manière que les fichiers test_jsp.java et test_jsp.class. vous constaterez que seule une nouvelle ligne de code est ajoutée à ce moment :
JspRuntimeLibrary.include(requête, réponse, "date.jsp", sortie, vrai);</P>
Il n'ajoute pas le code du fichier date.jsp à test.jsp.</P>
Il introduit simplement la réponse générée après l'exécution de la page date.jsp au moment de l'exécution. Cela signifie que nous pouvons spécifier n'importe quelle ressource Web pouvant générer une réponse (comme un servlet ou une page jsp), à condition que les types générés par celles-ci soient spécifiés. les ressources sont les mêmes que jsp Le type de contenu généré par la page est le même. Le conteneur JSP exécutera la ressource spécifiée via un appel de fonction interne. Par conséquent, ces ressources importées peuvent aider à traiter la demande d'origine, afin que ces ressources puissent accéder à tous les objets. dans la portée de la demande. Et tous les paramètres de la demande d'origine.</P>
Étant donné que ces pages n'ont pas encore été introduites dans la page principale lorsque la page principale est demandée, vous pouvez utiliser une valeur d'attribut de temps de demande pour l'attribut de page afin de déterminer quelle page introduire en fonction de la situation d'exécution. Vous pouvez également ajouter une requête. paramètres à lire par la page entrante.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >
<jsp:param name=”fitstParamer” value=”firstvalue”>
<jsp:param name="lastParamer" value="lastvalue">
</jsp:include></P>
Si la page jsp importée est modifiée, la dernière version de la page peut être utilisée immédiatement car la page importée est traitée exactement de la même manière que la page jsp appelée directement par le navigateur. , et entrez automatiquement dans l'étape de traduction pour obtenir la dernière version de la page.</P>
(Notez que l'élément de comportement include est le même que les autres éléments jsp. S'il n'y a pas de corps de comportement, il doit se terminer par "/". Tout comme ce qui suit.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)</P>
Voici la différence entre les deux utilisations de include. Il existe deux différences principales :
1 : Temps d’exécution :
<%@include file="relativeURI"%> est exécuté pendant la phase de traduction
<jsp:include page="relativeURI" flush="true" /> est exécuté pendant la phase de traitement de la requête.
2 : Différences dans le contenu introduit :
<%@include file="relativeURI"%>
Introduisez du texte statique (html, jsp) et intégrez-le à la page JSP avant qu'il ne soit converti en servlet.
<jsp:include page="relativeURI" flush="true" />Introduit le texte de réponse généré par la page d'exécution ou le servlet.
De plus, dans les deux utilisations, les attributs de fichier et de page sont interprétés comme un URI relatif. S'il commence par une barre oblique, il s'agit alors d'un chemin relatif à l'environnement. Il sera interprété en fonction du préfixe attribué à l'URI de l'application, s'il s'agit d'un chemin relatif à l'environnement. il ne commence pas par une barre oblique, il s'agit donc d'un chemin lié à la page. Il sera interprété en fonction du chemin de la page où ce fichier est introduit. Pour plus d'informations sur la façon dont les URL sont interprétées, veuillez vous référer aux documents pertinents ou. livres.