2011-10-24 11 views

Respuesta

34

jGuru:

Los <%@include file="abc.jsp"%> directiva actúa como C "#include", que tiran en el texto del archivo incluido y compilar como si eran parte del archivo que incluye. El archivo incluido puede ser de cualquier tipo (incluidos HTML o texto).

El < jsp: include page = "abc.jsp" > etiqueta compila el archivo como un archivo separado JSP, e incrusta una llamada a ella en el JSP compilado.

Algunos motores de JSP apoyan las etiquetas no estándar <!--#include file="data.inc"--> (NCSA-, o de estilo Shtml) y <%@ vinclude="data.inc" %> (JRun de estilo), pero estos no están definidos en la especificación JSP y por lo tanto no se puede confiar en.

Consulte también esta pregunta en las Preguntas frecuentes de JSP.

1

Se trata de una importación estática (<% = @ incluir ...> "), el otro es uno dinámico (jsp: include). Va a afectar, por ejemplo, la ruta que va a tener que especificar para su archivo incluido. Un poco de investigación en Google le dirá más.

51

Como se ha mencionado, <%@ include es una inclusión estática, <jsp:include es una inclusión dinámica. Piense en ello como una diferencia entre una macro y una función llamada (si está familiarizado con esos términos). Otra forma de decirlo, una inclusión estática es exactamente lo mismo que copiar y pegar el contenido exacto del archivo incluido (el "código") en la ubicación de la declaración <%@ include (cual es exactamente lo que hará el compilador JSP.

Una dinámica incluyen hará una petición (usando la solicitud despachador) que ejecutar la página indicada y luego incluir la salida de la página en la salida de la página de llamada, en lugar de la declaración <jsp:include.

La gran diferencia aquí es que con una inclusión dinámica, la página incluida se ejecutará en su propio pageContext. Y dado que es una solicitud, puede enviar parámetros a la página de la misma forma que puede enviar parámetros junto con cualquier otra solicitud. Una inclusión estática, por otro lado, es solo una pieza de código que se ejecutará dentro del contexto de la página de llamada. Si se incluye de modo pasivo el mismo archivo más de una vez, el código en el archivo existirá en varias ubicaciones en la página de llamada así que algo como

<% 
int i = 0; 
%> 

generaría un error de compilación (ya que la misma variable no puede ser declarada mas de una vez).

93

En una pieza reutilizable de código que utilizan la directiva <%@include file="reuse.html"%> y en el segundo uso el tag <jsp:include page="reuse.html" />.

Deje que el código en el archivo reutilizable sea:

<html> 
<head> 
    <title>reusable</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</head> 
<body> 
    <img src="candle.gif" height="100" width="50"/> <br /> 
    <p><b>As the candle burns,so do I</b></p> 
</body> 

Después de ejecutar tanto los archivos JSP se ve la misma salida y pensar si había alguna diferencia entre el Directiva y la etiqueta. Pero si nos fijamos en la generada servlet de los dos archivos JSP, verá el difference.Here es lo que se verá cuando se utiliza el directive:

out.write("<html>\r\n"); 
out.write(" <head>\r\n"); 
out.write("  <title>reusable</title>\r\n"); 
out.write("  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n"); 
out.write(" </head>\r\n"); 
out.write(" <body>\r\n"); 
out.write("  <img src=\"candle.gif\" height=\"100\" width=\"50\"/> <br />\r\n"); 
out.write("  <p><b>As the candle burns,so do I</b></p>\r\n"); 
out.write(" </body>\r\n"); 
out.write("</html>\r\n"); 

y esto es lo que verá la etiqueta usada en el segundo archivo JSP:

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false); 

Así que ya saben que la directiva include inserta la fuente de reuse.html en tiempo de traducción pero la etiqueta de acción inserta la respuesta de reuse.html en tiempo de ejecución.

Si lo piensas bien, hay un golpe de rendimiento adicional con cada etiqueta de acción (jsp:include file). Significa que puede garantizar que siempre tendrá el último contenido, pero aumenta el costo de rendimiento.

+5

¿Puede ser más específico en qué incluir el resultado en qué salida? Mencionó que su segunda directiva de inclusión es using (@include). Luego, en el primer resultado de salida, mencionaste que usaste directiva (@include), pero en el segundo resultado de salida, también dijiste que es de segunda inclusión (que, según tu explicación anterior, es @include). – stack247

+0

Muy buena explicación ... + 1 y pulgares arriba –

+30

En caso de que alguien más esté confundido por esta respuesta: ' eis

27

1) ¿Cuándo utilizar incluir la directiva?

para evitar la duplicación de misma lógica de salida a través de múltiples de JSP de la aplicación web, incluir mecanismo se utiliza es decir., Para promover la reutilización de la lógica de presentación incluir se utiliza directiva

<%@ include file="abc.jsp" %> 

cuando la instrucción anteriormente es recibido por el motor jsp, recupera el código fuente de abc.jsp y copia el mismo en línea en el jsp actual. Después de copiar traducción se lleva a cabo para la página actual

simplemente diciendo que es la instrucción estática a JSP es decir motor., El código fuente de toda "abc.jsp" se copia en la página actual

2) ¿Cuándo utilizar incluir acción?

incluyen la etiqueta no incluye el código fuente de la página incluida en la página actual en lugar de la salida generada en tiempo de ejecución por la página incluida se incluye en la respuesta de página actual

incluyen funcionalidad de etiquetas es similar a la de incluir el mecanismo de solicitud de despachador de la programación de servlets

etiqueta include es la instrucción de tiempo de ejecución es decir, a jSP motor., en lugar de copiar el código entero en la página actual se hace una llamada a un método de "abc.jsp" de la página actual

+1

¡Gran explicación! En tiempo de traducción (estática) directivas <% @ include file = "file.jsp"%> O En tiempo de ejecución (acción) Joe

1

Java Revisited

  1. El recurso incluido por la directiva include se carga durante el tiempo de traducción jsp, mientras que el recurso incluido por la acción include se carga durante el tiempo de solicitud.
  2. Cualquier cambio en el recurso incluido no será visible en caso de incluir la directiva hasta que el archivo jsp vuelva a compilarse. Mientras que en caso de incluir acción, cualquier cambio en el recurso incluido será visible en la siguiente solicitud.
  3. Incluir directiva es importación estática, mientras que incluir acción es importación dinámica
  4. Incluir directiva utiliza el atributo de archivo para especificar el recurso que se incluirá, mientras que incluir acción usar atributo de página para el mismo propósito.
Cuestiones relacionadas