Todos sabemos que hay dos formas de inclusión en jsp, a saber
<%@ incluir archivo=” ”%>
<jsp:include page=” ” flush=”true”/></P>
El primero es un elemento de instrucción y el segundo es un elemento comportamental. ¿Dónde se utilizarán exactamente? ¿Cómo usarlos y cuál es la diferencia? Esta debería ser una pregunta en la que mucha gente pensará cuando la vea. Echemos un vistazo a continuación. </P>
Por lo general, cuando ciertas partes de todas las páginas de la aplicación (como títulos, pies de página y barras de navegación) son iguales, podemos considerar usar incluir. Específicamente, cuándo usar <%@ include file=""%> y cuándo usar <jsp:include page="" flux="true"/>. Lo primero que hay que entender es la diferencia entre ellos. Sólo comprendiendo las diferencias en su uso se podrá entender cuándo utilizarlos y cómo elegir.
<%@ include file=" ”%>, el elemento directivo jsp include lee el contenido de la página especificada. E integrar estos contenidos con la página original. (Este proceso se lleva a cabo durante la etapa de traducción: es decir, la etapa en la que jsp se convierte en servlet.</P>
Aquí hay una explicación de la etapa de traducción: Sabemos que la página jsp no se puede enviar intacta al navegador y que el servidor primero debe procesar todos los elementos jsp. Esto se hace convirtiendo la página jsp en un servlet y luego ejecutando el servlet. El servidor necesita un contenedor jsp para procesar páginas jsp. El contenedor jsp generalmente se implementa en forma de servlet. Este servlet está configurado para manejar todas las solicitudes de páginas jsp. </P>
El contenedor Jsp es responsable de convertir la página jsp en un servlet (¿llamado clase de implementación de página jsp? Clase de implementación de página JSP) y compilar este servlet. Estos dos pasos constituyen la etapa de traducción.</P>
De esto sabremos: la página jsp agrega el contenido real (es decir, el fragmento de código) de la página especificada por el elemento de directiva de inclusión a la página jsp que lo presenta. Después de sintetizarlo en un archivo, se convierte en un archivo. servlet por el contenedor jsp. Puede ver que en este momento se generarán un archivo de clase temporal y un archivo java. He aquí un ejemplo. </P>
El servidor utiliza Tomcat y el archivo jsp introducido en la página se llama test.jsp. La página importada se llama date.jsp. Este archivo jsp almacena un código jsp relacionado con el tiempo y la raíz del contexto actual está configurada para prueba.
//======Archivo fuente de date.jsp======//
<%@ idioma de la página="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date fecha=new java.util.Date();
Cadena fecha_cn = "";
Cadena fechaStr = "";
cambiar(fecha.getDay())
{
caso 0:date_cn = "Día";
caso 1:date_cn = "一";
caso 2:date_cn = "二";
caso 3:date_cn = "三";
caso 4:date_cn = "四";
caso 5:date_cn = "五";
caso 6:date_cn = "六";
}
dateStr = (1900+date.getYear()) + "Año" + (date.getMonth()+1) + "Mes" + date.getDate() + "Día (día laborable) + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======El siguiente es el archivo fuente de test.jsp=============//
<%@ idioma de la página=”java” contentType=”text/html;charset=gb2312”%>
<html>
<cabeza>
<title>Dos usos de incluir</title>
<jsp:include page=”fecha.jsp” flush=”true”/>
<%--@ incluir archivo=”fecha.jsp” %-->
// Usamos dos formas diferentes de inclusión aquí para presentar el archivo date.jsp.
<cabeza>
<cuerpo>
<tabla><tr><td>
Preste atención a los dos usos de incluir en jsp.
</td></tr></table>
</cuerpo>
</html></P>
En el archivo test.jsp, solo generamos una línea de texto "Aproximadamente dos usos de incluir en jsp. Preste atención". Ahora usemos primero el formulario <%@ include file="date.jsp" %> Introduzca el archivo fecha.jsp. ¿Crees que algo podría salir mal? Aparece un mensaje de error en este momento:
¿Estado HTTP 500?
org.apache.jasper.JasperException: /date.jsp(0,0) Directiva de página: no puede haber múltiples apariciones de contentType
Hay un montón de errores a continuación, pero solo necesitamos mirar esto para ver dónde radica el problema. El código de estado es http 500 Error interno del servidor. Eche otro vistazo a los consejos a continuación. No se pueden especificar varios tipos de contenido en la página date.jsp.</P>
He aquí por qué. Esto se debe a que durante la fase de traducción, el código del archivo date.jsp se agregó intacto a la página test.jsp para sintetizar un archivo. El archivo sintetizado será el mismo:
<%@ idioma de la página=”java” contentType=”text/html;charset=gb2312”%>
Este código. La solución es eliminar esta frase en el archivo date.jsp. Actualiza y luego solicita la página test.jsp</P>
La solicitud test.jsp se muestra en la página de la siguiente manera
10 de diciembre de 2003 13:12:40
Preste atención a los dos usos de incluir en jsp. </P>
No podemos encontrar nada todavía. Revisemos los archivos temporales en Tomcat. Vaya allí y vea si el contenido del archivo date.jsp se ha agregado al archivo test.jsp.
<Nota. El Tomcat aquí está instalado en el directorio raíz de la unidad E>
Tabla de contenido
E:tomcatworkStandalonelocalhosttest.
En este directorio verás
Hay dos archivos test_jsp.java y test_jsp.class. </P>
El archivo java aquí es el archivo test_jsp.java obtenido al convertir jsp en servlet mediante el contenedor jsp. </P>
El archivo test_jsp.class correspondiente es el archivo de clase generado al compilar el archivo servlet test_jsp.java. Abra el archivo de servlet generado (test_jsp.java). En este punto, encontraremos que cuando el archivo test.jsp se convierte en un archivo servlet, se agrega algún código que no está en la página test.jsp entre la salida <haed>. El contenido recién agregado es el código en la fecha. jsp: Pruebe y vea qué contenido nuevo se ha agregado o si realmente se ha agregado contenido nuevo. Quedará claro de un vistazo. No entraré en detalles aquí.</P>
Lo anterior es el resultado que obtenemos usando el formulario <%@ include file="date.jsp"%>.
A continuación, usamos <jsp:include page="dae.jsp" flux="true"/>, es decir,
Reemplace <%@ include file="date.jsp"%> con <jsp:include page="dae.jsp" flux="true"/> y luego solicite test.jsp.
2003?ê 12??10??
Preste atención a los dos usos de incluir en jsp. </P>
En este momento, verá en la página que los caracteres chinos en la salida de fecha del date.jsp que introdujimos están confusos. ¿Cuál es el motivo? Es necesario explicar la etapa de procesamiento de solicitudes. Además de ser responsable de convertir páginas jsp en servlets como se mencionó anteriormente, el contenedor Jsp también es responsable de llamar a la clase de implementación de la página jsp para procesar cada solicitud y generar una respuesta. etapa de procesamiento de solicitudes. La etapa de procesamiento de solicitudes solo ejecuta el archivo de clase). </P>
Entonces, cuando introducimos el elemento de acción de inclusión en la página, en realidad solo hacemos referencia al archivo de clase de servlet generado después de convertir y compilar el archivo date.jsp. En este caso, date.jsp se prueba como un archivo separado después de la ejecución. Se llama cuando el archivo .jsp se está ejecutando. Debido a que la codificación de caracteres no está especificada en el archivo date.jsp, aparecen caracteres confusos. La solución es volver a reemplazar los caracteres que se acaban de eliminar en el archivo date.jsp.
<%@ idioma de la página=”java” contentType=”text/html;charset=gb2312”%>
Después de agregar esta línea de declaración, actualice y vuelva a ejecutar. En este momento, la página se muestra correctamente y es la misma que cuando se ejecuta normalmente con la directiva de inclusión. Si observa los archivos temporales en Tomcat, lo encontrará allí. Es un archivo date_jsp.java y un archivo date_jsp.class. Estos dos archivos se obtienen de la misma manera que los archivos test_jsp.java y test_jsp.class. Verá que en este momento solo se agrega una nueva línea de código:
JspRuntimeLibrary.include(solicitud, respuesta, "date.jsp", salida, verdadero);</P>
No agrega el código del archivo date.jsp a test.jsp.</P>
Simplemente introduce la respuesta generada después de que la página date.jsp se ejecuta en tiempo de ejecución. Esto significa que podemos especificar cualquier recurso web que pueda generar una respuesta (como un servlet o una página jsp), siempre que los tipos generados por estos. Los recursos son los mismos que jsp. El tipo de contenido generado por la página es el mismo. El contenedor JSP ejecutará el recurso especificado a través de una llamada de función interna. Por lo tanto, estos recursos importados pueden ayudar a procesar la solicitud original, para que estos recursos puedan acceder a todos los objetos. en el alcance de la solicitud. Y todos los parámetros de la solicitud original.</P>
Dado que estas páginas aún no se han introducido en la página principal cuando se solicita la página principal, puede usar un valor de atributo de tiempo de solicitud para el atributo de página para determinar qué página introducir según la situación del tiempo de ejecución. También puede agregar alguna Solicitud. parámetros que debe leer la página entrante.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >
<jsp:param nombre=”fitstParamer” valor=”primer valor”>
<jsp:nombre del parámetro=”últimoparámetro” valor=”último valor”>
</jsp:incluir></P>
Si se modifica la página jsp importada, la última versión de la página se puede utilizar inmediatamente. Esto se debe a que la página importada se trata exactamente de la misma manera que la página jsp llamada directamente por el navegador. , y entrará automáticamente en la etapa de traducción para obtener la última versión de la página.</P>
(Tenga en cuenta que el elemento de comportamiento de inclusión es el mismo que otros elementos jsp. Si no hay un cuerpo de comportamiento, debe terminar con "/". Como se muestra a continuación.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)</P>
La siguiente es la diferencia entre los dos usos de incluir. Hay dos diferencias principales;
1: tiempo de ejecución:
<%@ include file=”relativeURI”%> se ejecuta durante la fase de traducción
<jsp:include page="relativeURI" flux="true" /> se ejecuta durante la fase de procesamiento de la solicitud.
2: Diferencias en el contenido introducido:
<%@ incluir archivo=”relativeURI”%>
Introduzca texto estático (html, jsp) e intégrelo con la página JSP antes de convertirla en un servlet.
<jsp:include page="relativeURI" Flush="true" />Presenta el texto de respuesta generado por la página de ejecución o el servlet.
Además, en ambos usos, los atributos de archivo y página se interpretan como un URI relativo. Si comienza con una barra diagonal, entonces es una ruta relativa al entorno. Se interpretará de acuerdo con el prefijo asignado al URI de la aplicación, si es así. si no comienza con una barra, entonces es una ruta relacionada con la página. Se interpretará de acuerdo con la ruta de la página donde se introduce este archivo. Para obtener más información sobre cómo se interpretan las URL, consulte los materiales relevantes o. libros.