Differenza tra jsp:include e @ include file

DOMANDA:

Che differenza c'è tra: 

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

<jsp:include page="pagina.jsp">?


RISPOSTA:

Cerchiamo di spiegare brevemente la differenza e subito dopo ne vedremo gli effetti con dei semplici esempi.


DIRETTIVA @INCLUDE
<%@ include file="pagina.jsp" %>
E' una direttiva che richiama il file indicato tra virgolette (nel nostro esempio pagina.jsp) facendolo diventare parte della pagina in cui è incluso. Detto in parole semplici è come se facessimo un copia e incolla del contenuto del file pagina.jsp in corrispondenza dell'inclusione. Questo implica che non è necessario includere un file specifico, ma viene accettata qualunque tipologia, anche un semplice .txt.


DIRETTIVA JSP:INCLUDE
<jsp:include page="pagina.jsp">
In questo caso invece non avviene una semplice sostituzione. Il file indicato come valore dell'attributo page, viene compilato separatamente come se fosse una normale JSP e l'inclusione non è altro che una chiamata implicita al codice. Infatti, con questa direttiva jsp:include è possibile specificare dei parametri che verranno gestiti da pagina.jsp.

Per passare dei parametri è sufficiente dichiararli in questo modo:
<jsp:include page="pagina.jsp"> 
   <jsp:param name="param1" value="pippo" />
   <jsp:param name="param2" value="pluto" />
   <jsp:param name="param3" value="paperino" />
</jsp:include>
In pagina.jsp potremo semplicemente effettuare una request.getParameter("param1") per ottenere il valore pippo e così per gli altri due parametri.


ESEMPIO

Guardiamo insieme un esempio completo di JSP con i due tipi di inclusione:

La pagina inclusione.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <title>Esempi di inclusione</title>
   </head>
   <body>
Includo una pagina tramite la direttiva @ include file: <br / >
      <%@ include file="pagina1.jsp"%>
      <br / ><br / >

Includo una pagina tramite la direttiva jsp:include: <br / >
      <jsp:include page="pagina2.jsp">
        <jsp:param name="param1" value="http://" />
        <jsp:param name="param2" value="lancill." />
        <jsp:param name="param3" value="blogspot.it" />
      </jsp:include>
   </body>
</html>

La prima pagina inclusa pagina1.jsp (che potrebbe essere anche un semplice file di testo):
<a href="http://lancill.blogspot.it">Il blog di Lancill con @ include</a>

La seconda pagina inclusa pagina2.jsp (che elabora i tre parametri ricevuti):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<a href="<%= request.getParameter("param1") %>
         <%= request.getParameter("param2") %>
         <%= request.getParameter("param3") %>">
   Il blog di Lancill con jsp:include
</a>

Lanciamo le pagine dal nostro Web Server (ad esempio Tomcat) e il risultato sarà banalmente:

Includo una pagina tramite la direttiva @ include file:
Il blog di Lancill con @ include

Includo una pagina tramite la direttiva jsp:include:
Il blog di Lancill con jsp:include


NOTA: per i più esperti può sembrare scontato, ma l'essere incluso in un'altra pagina JSP non implica la protezione e la regolazione dell'accesso per il file incluso. Quindi è buona norma preoccuparsi dei privilegi di accesso alle risorse incluse come se fossero risorse a se stanti.



Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java