¿Cuál es la diferencia entre incluir archivos con la directiva de inclusión JSP, la acción de inclusión JSP y usar archivos de etiquetas JSP?
Parece que hay dos métodos para crear plantillas con JSP. Incluir 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 utilizar? ¿Se considera alguno ahora obsoleto o ambos son válidos y cubren diferentes casos de uso?
Editar
¿No es lo mismo usar este archivo de etiquetas 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ámelo en 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 un include y pasarle parámetros. Entonces, ¿los archivos de etiquetas son lo mismo que los incluidos?
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 secuencias de comandos : son elementos de codificación Java, como declaraciones, expresiones, scriptlets y comentarios.
- Objetos y ámbitos : los objetos JSP se pueden crear de forma explícita o implícita y son accesibles dentro de un ámbito determinado, como desde cualquier lugar de la página JSP o de la sesión.
- Acciones : crean objetos o afectan el flujo de salida en la respuesta JSP (o ambos).
Cómo se incluye el contenido en JSP
Existen varios mecanismos para reutilizar el contenido de un archivo JSP.
Los siguientes cuatro mecanismos para incluir contenido en JSP se pueden clasificar como reutilización directa :
(para los primeros tres mecanismos, se cita "Head First Servlets and JSP" )
1) La directiva de inclusión :
<%@ include file="header.html" %>
Estático : agrega el contenido del valor del atributo del archivo a la página actual en el momento de la traducción . La directiva fue pensada originalmente para plantillas de diseño estáticas, 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 la página a la página actual en el momento de la solicitud . Estaba pensado más para 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 de manera muy similar a
<jsp:include>
, pero es más potente y flexible: a diferencia de los otros dos, la<c:import>
URL puede ser externa al contenedor web .4) Preludios y codas:
Estático : los preludios y codas se pueden aplicar sólo al principio y al final de las páginas .
Puede incluir implícitamente preludios (también llamados encabezados) y codas (también llamados pies de página) para un grupo de páginas JSP agregando elementos<include-prelude>
y<include-coda>
respectivamente dentro de un elemento en el descriptor de implementación web.xml<jsp-property-group>
de la aplicación web .Lea más aquí:
• Configuración de inclusiones implícitas al principio y al final de JSP
• Definición de inclusiones implícitas
Tag File es un método indirecto de reutilización de contenido, una forma de encapsular contenido reutilizable . Un archivo de etiquetas es un archivo fuente que contiene un fragmento de código JSP que se puede reutilizar como una etiqueta personalizada .
El PROPÓSITO de los archivos incluidos y de etiquetas es diferente.
El archivo de etiquetas (un concepto introducido con JSP 2.0) es una de las opciones para crear etiquetas personalizadas . Es una forma más rápida y sencilla de crear etiquetas personalizadas . Las etiquetas personalizadas , también conocidas como extensiones de etiquetas, son elementos JSP que permiten insertar lógica personalizada y resultados proporcionados por otros componentes Java en páginas JSP. La lógica proporcionada a través de una etiqueta personalizada se implementa mediante un objeto Java conocido como controlador de etiquetas .
Algunos ejemplos de tareas que pueden realizarse mediante etiquetas personalizadas incluyen operar con 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.
Respecto a tu edición
Quizás en su ejemplo (en el párrafo "Editar" ) no haya diferencia entre usar la inclusión directa y un archivo de etiquetas. Pero las etiquetas personalizadas tienen un amplio conjunto de características . Ellos pueden
Ser personalizado mediante atributos pasados desde la página de llamada.
Pase las variables de regreso 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 haga referencia a ese bean en una etiqueta y luego usar el bean en otra etiqueta.
Estar anidados unos dentro de otros y comunicarse mediante variables privadas.
Lea también esto de "Pro JSP 2": Comprensión de las etiquetas personalizadas JSP .
Lectura útil
Diferencia entre directiva de inclusión y acción de inclusión en JSP
Trucos JSP para facilitar la creación de plantillas
Tutorial muy informativo y fácil de entender de coreservlet.com con hermosas explicaciones que incluyen
<jsp:include> VS. <%@ include %>
una tabla de comparación:
Inclusión de archivos y applets en páginas JSPOtro buen tutorial de coreservlets.com relacionado con bibliotecas de etiquetas y archivos de etiquetas:
Creación de bibliotecas de etiquetas JSP personalizadas: conceptos básicosEl tutorial oficial de Java EE 5 con ejemplos:
Encapsulación de contenido reutilizable mediante archivos de etiquetas .Esta página del tutorial oficial de Java EE 5 debería brindarle aún más comprensión:
Reutilización de contenido en páginas JSP .Este extracto del libro "Pro JSP 2" también explica por qué necesita un archivo de etiquetas en lugar de usar archivos estáticos :
Reutilización de contenido con archivos de etiquetasGuía muy útil extraída directamente de la documentación de Oracle:
Incluye estática versus inclusión dinámica
Conclusión
Utilice las herramientas adecuadas para cada tarea.
Utilice Tag Files como una forma rápida y sencilla de crear etiquetas personalizadas que pueden ayudarle a encapsular contenido reutilizable. .
En cuanto a la inclusión de contenido en JSP (cita de aquí ):
- Utilice 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.
- Utilice la acción de inclusión solo para contenido que cambia con frecuencia y si no se puede decidir qué página incluir hasta que se solicite la página principal.
Posible pregunta duplicada
<@include>
- La etiqueta directiva indica al compilador JSP que combine el contenido 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.
- Sólo 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).
- No es necesario que la página incluida pueda 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 de uso convencional.
- Una desventaja de los contenedores más antiguos es que es posible que los cambios en las páginas de inclusión no surtan efecto hasta que se actualice la página principal. Las versiones recientes de Tomcat comprobará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, es probable que la compilación JSP falle.
<jsp:include>
- La etiqueta Acción JSP, por otro lado, indica al contenedor que pausa la ejecución de esta página, ejecuta la página incluida y fusiona la salida de esa página con la salida de esta página.
- Cada página incluida se ejecuta como un servlet independiente en tiempo de ejecución.
- Las páginas se pueden incluir condicionalmente en tiempo de ejecución. Esto suele ser útil para crear plantillas 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 scriptlet deben pasarse explícitamente a la página de inclusión.
- La página incluida debe poder ejecutarse por sí sola.
- Es menos probable que se produzcan 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 utilizar
<@include>
o<jsp:include>
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>
lo cual no es posible en<%@include file="somefile.jsp" %>