¿Cuál es la diferencia entre incluir archivos con la directiva de inclusión JSP, la acción de inclusión de JSP y el uso de archivos de etiqueta JSP?

155

Parece que hay dos métodos para crear plantillas con JSP. Incluyendo archivos con una de estas declaraciones

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

o usando archivos de etiquetas JSP

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

Y en otra página JSP llámalo con

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

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

Entonces, ¿qué método debo usar? ¿Ahora se considera obsoleto o ambos son válidos y cubren diferentes casos de uso?

Editar

¿No es lo mismo usar este archivo de etiqueta que usar una inclusión?

// 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/>

Y llámalo a otro JSP con

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

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

Eso me parece lo mismo que usar una inclusión y pasarle parámetros. Entonces, ¿son los archivos de etiqueta lo mismo que incluye?

estampido supersónico
fuente

Respuestas:

293

Descripción general de los elementos de sintaxis JSP

Primero, para aclarar las cosas, aquí hay una breve descripción de los elementos de sintaxis JSP :

  • Directivas : transmiten información sobre la página JSP en su conjunto.
  • Elementos de secuencia de comandos : son elementos de codificación de Java, como declaraciones, expresiones, secuencias de comandos y comentarios.
  • Objetos y ámbitos : los objetos JSP pueden crearse explícita o implícitamente y son accesibles dentro de un ámbito determinado, como desde cualquier lugar de la página JSP o la sesión.
  • Acciones : crean objetos o afectan la secuencia de salida en la respuesta JSP (o ambas).

Cómo se incluye el contenido en JSP

Existen varios mecanismos para reutilizar contenido en un archivo JSP.

Los siguientes 4 mecanismos para incluir contenido en JSP pueden clasificarse como reutilización directa :
(para los primeros 3 mecanismos que citan "Head First Servlets and JSP" )

1) La directiva include :

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

Estático : agrega el contenido del valor del atributo de archivo a la página actual en el momento de la traducción . La directiva originalmente estaba destinada a plantillas de diseño estático, como encabezados HTML.

2) La <jsp:include> acción estándar :

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

Dinámico : agrega el contenido del valor del atributo de página a la página actual en el momento de la solicitud . Estaba destinado más a contenido dinámico proveniente de JSP.

3) La <c:import>etiqueta JSTL:

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

Dinámico : agrega el contenido del valor del atributo URL a la página actual, en el momento de la solicitud . Funciona mucho <jsp:include>, pero es más potente y flexible: a diferencia de los otros dos incluidos, ¡la <c:import> url puede ser desde fuera del contenedor web !

4) Preludios y codas:

Estático : los preludios y las codas se pueden aplicar solo al principio y al final de las páginas .
Puede incluir implícitamente preludios (también llamados cabeceras) y codas (también llamados pies de página) para un grupo de páginas JSP mediante la adición <include-prelude>y <include-coda>elementos, respectivamente, dentro de un <jsp-property-group>elemento de la aplicación Web web.xml descriptor de despliegue. Lea más aquí:
Configuración de inclusiones implícitas al principio y al final de JSPs
Definición de inclusiones implícitas


Tag File es un método indirecto de reutilización de contenido, la forma de encapsular contenido reutilizable . Un archivo de etiqueta es un archivo fuente que contiene un fragmento de código JSP que es reutilizable como etiqueta personalizada .

El PROPÓSITO de incluye y archivos de etiqueta es diferente.

El archivo de etiqueta (un concepto introducido con JSP 2.0) es una de las opciones para crear etiquetas personalizadas . Es una forma más rápida y fácil de crear etiquetas personalizadas . Las etiquetas personalizadas , también conocidas como extensiones de etiqueta, son elementos JSP que permiten que la lógica personalizada y la salida proporcionada por otros componentes Java se inserten en las páginas JSP. La lógica proporcionada a través de una etiqueta personalizada es implementada por un objeto Java conocido como manejador de etiquetas .

Algunos ejemplos de tareas que pueden realizarse mediante etiquetas personalizadas incluyen operar en objetos implícitos, procesar formularios, acceder a bases de datos y otros servicios empresariales como correo electrónico y directorios, e implementar control de flujo.


En cuanto a su edición

Tal vez en su ejemplo (en su Edición ), no hay diferencia entre el uso de inclusión directa y un archivo de etiqueta. Pero las etiquetas personalizadas tienen un amplio conjunto de características . Ellos pueden

  • Se personaliza mediante atributos pasados ​​desde la página de llamada.

  • Pase las variables de vuelta a la página de llamada.

  • Acceda a todos los objetos disponibles para las páginas JSP.

  • Comunicarse entre sí. Puede crear e inicializar un componente JavaBeans, crear una variable EL pública que se refiera a ese bean en una etiqueta y luego usar el bean en otra etiqueta.

  • Estar anidados uno dentro del otro y comunicarse mediante variables privadas.

Lea también esto de "Pro JSP 2": Comprensión de las etiquetas personalizadas de JSP .


Lectura útil.


Conclusión

Use las herramientas adecuadas para cada tarea.


Use los archivos de etiquetas como una forma rápida y fácil de crear etiquetas personalizadas que pueden ayudarlo a encapsular contenido reutilizable .

En cuanto al contenido incluido en JSP (cita de aquí ):

  • Use la directiva include si el archivo cambia raramente . Es el mecanismo más rápido. Si su contenedor no detecta cambios automáticamente, puede forzar que los cambios surtan efecto eliminando el archivo de clase de la página principal.
  • Use la acción de inclusión solo para el contenido que cambia con frecuencia , y si no se puede decidir qué página incluir hasta que se solicite la página principal.
informatik01
fuente
¿Pero no es <jsp: include> lo mismo que usar archivos de etiqueta? No puedo ver ninguna diferencia ... Puede pasar variables a los archivos incluidos con <jsp: include> tal como puede pasar variables a los archivos de etiquetas. Ambos métodos le permiten reutilizar contenido, parecen hacer exactamente lo mismo. ¿Hay alguna diferencia entre ellos aparte de sus nombres?
sonicboom
@sonicboom Actualicé mi respuesta
informatik01
1
@ informatik01 muy buena respuesta, agradezco la profundidad, el buen formato y la muy útil lista de 4 mecanismos.
Russell Silva el
1
¿Cuál es exactamente la ventaja de <jsp: include> sobre <* @ include url ..>?
Krsna Chaitanya
@KrsnaChaitanya Nota: tiene un error tipográfico (el asterisco *) en la directiva de inclusión. <jsp:include>es una acción de inclusión estándar , <%@ include file="" %>es la directiva de inclusión . Lea la última sección (en el cuadro gris) que describe las ventajas (es decir, recomendaciones sobre cuándo elegir una u otra). Consulte también este artículo para obtener una descripción detallada. Espero que esto ayude.
informatik01
21

Posible pregunta duplicada

<@include>- La etiqueta directiva indica al compilador JSP que combine los contenidos del archivo incluido en el JSP antes de crear el código de servlet generado. Es el equivalente a cortar y pegar el texto de su página de inclusión directamente en su JSP.

  • Solo se ejecuta un servlet en tiempo de ejecución.
  • Se puede acceder a las variables de Scriptlet declaradas en la página principal en la página incluida (recuerde, son la misma página).
  • La página incluida no necesita poder compilarse como un JSP independiente. Puede ser un fragmento de código o texto sin formato. La página incluida nunca se compilará de forma independiente. La página incluida también puede tener cualquier extensión, aunque .jspf se ha convertido en una extensión utilizada convencionalmente.
  • Un inconveniente de los contenedores más antiguos es que los cambios en las páginas de inclusión pueden no tener efecto hasta que se actualice la página principal. Las versiones recientes de Tomcat revisarán las páginas de inclusión en busca de actualizaciones y forzarán una recompilación del padre si están actualizadas.
  • Otro inconveniente es que, dado que el código está integrado directamente en el método de servicio del servlet generado, el método puede crecer mucho. Si supera los 64 KB, su compilación JSP probablemente fallará.

<jsp:include> - La etiqueta de acción JSP, por otro lado, indica al contenedor que pause la ejecución de esta página, vaya a ejecutar la página incluida y combine la salida de esa página con la salida de esta página.

  • Cada página incluida se ejecuta como un servlet separado en tiempo de ejecución.
  • Las páginas se pueden incluir condicionalmente en tiempo de ejecución. Esto a menudo es útil para crear plantillas de marcos que crean páginas a partir de inclusiones. La página principal puede determinar qué página, si corresponde, incluir según alguna condición de tiempo de ejecución.
  • Los valores de las variables de scriptlet deben pasarse explícitamente a la página de inclusión.
  • La página incluida debe poder ejecutarse sola.
  • Es menos probable que encuentre errores de compilación debido a que se excede el tamaño máximo del método en la clase de servlet generada.

Dependiendo de sus necesidades, puede usar <@include>o <jsp:include>

Darth
fuente
1
¿Quiere decir como mostró en su pregunta <t:mytag><h1>Hello World</h1></t:mytag>:? Eso no es una inclusión, es el uso normal de una etiqueta (como <jsp:useBean>o <c:if>).
Uooo
Entonces, ¿cuál es la diferencia entre usar archivos de etiquetas e incluirlos ya que parece que los archivos de etiquetas se pueden usar para incluir contenido en una página?
sonicboom
9

La principal ventaja de <jsp:include />over <%@ include >es:

<jsp:include /> permite pasar parámetros

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

que no es posible en <%@include file="somefile.jsp" %>

Saurabh Ande
fuente
¿Qué pasa con los archivos de etiqueta? Sé cómo funciona el inlcude. Me pregunto cómo se relacionan los archivos de etiquetas, ya que parece que proporcionan la misma funcionalidad. ¿Cuál es la diferencia entre usar tagfiles y usar include?
sonicboom
¿qué tal <%@include file="somefile.jsp?menu=value" %>? ¿Eso también está restringido?
Roshana Pitigala
5

Las tres opciones de la plantilla - <%@include>, <jsp:include>y <%@tag>son válidas, y todas diferentes casos de uso de tres de cubierta.

Con <@include>, el analizador JSP integra el contenido del archivo incluido en el JSP antes de la compilación (similar a una C #include). Usaría esta opción con contenido simple y estático: por ejemplo, si desea incluir encabezado, pie de página o elementos de navegación en cada página de su aplicación web. El contenido incluido se convierte en parte del JSP compilado y no hay costo adicional en tiempo de ejecución.

<jsp:include>(y los JSTL <c:import>, que son similares e incluso más potentes) se adaptan mejor al contenido dinámico. Úselos cuando necesite incluir contenido de otra URL, local o remota; cuando el recurso que está incluyendo es dinámico en sí mismo; o cuando el contenido incluido utiliza variables o definiciones de bean que entran en conflicto con la página incluida. <c:import>también le permite almacenar el texto incluido en una variable, que puede manipular o reutilizar aún más. Ambos incurren en un costo de tiempo de ejecución adicional para el envío: esto es mínimo, pero debe tener en cuenta que la inclusión dinámica no es "gratuita".

Utilice archivos de etiquetas cuando desee crear componentes de interfaz de usuario reutilizables. Si tiene una Lista de widgets, por ejemplo, y desea iterar sobre los Widgets y mostrar las propiedades de cada uno (en una tabla o en un formulario), crearía una etiqueta. Las etiquetas pueden tomar argumentos, utilizando <%@tag attribute>y estos argumentos pueden ser obligatorios u opcionales, algo así como los parámetros del método.

Los archivos de etiquetas son un mecanismo más simple, basado en JSP, para escribir bibliotecas de etiquetas, que (antes de JSP 2.0) tenía que escribir usando código Java. Es mucho más limpio escribir archivos de etiquetas JSP cuando hay mucho procesamiento que hacer en la etiqueta: no es necesario mezclar código Java y HTML como lo haría si escribiera sus etiquetas en Java.

Hari
fuente
1

De acuerdo con: Java Revisited

  1. Los recursos incluidos por la directiva include se cargan durante el tiempo de traducción jsp, mientras que los recursos incluidos por la acción include se cargan durante el tiempo de solicitud.

  2. Cualquier cambio en los recursos incluidos 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 próxima solicitud.

  3. La directiva de inclusión es importación estática, mientras que la acción de inclusión es importación dinámica.

  4. La directiva de inclusión usa el atributo de archivo para especificar los recursos que se incluirán, mientras que la acción de inclusión usa el atributo de página para el mismo propósito.

Abhijeet Ashok Muneshwar
fuente