Tecnologie Web: Parte 6g [Giovedì, 18 Maggio 2006, LABORATORIO]

Home /  Teaching

Installare le librerie di TAG

Seppur standard, la libreria di TAG JSTL non è contenuta nel container e va installata manualmente. Per farlo scaricate dal sito http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi il pacchetto più recente [ad esempio 1.1.2.zip]. Estraete dalla cartella lib i due files jstl.jar e standard.jar e copiateli nella cartella <inizialeCognome>\WEB-INF\lib. Infine, ricordatevi di fare il reload della vostra applicazione da Tomcat Manager.

La string tag library non è invece parte di JSTL e va installata a parte. Scaricate dal sito http://jakarta.apache.org/site/downloads/downloads_taglibs-string.cgi il pacchetto più recente [ad esempio 1.1.0.zip]. Estraete dal pacchetto il file taglibs-string.tld e copiatelo nella cartella <inizialeCognome>\WEB-INF; inoltre copiate il file taglibs-string.jar in <inizialeCognome>\WEB-INF\lib. Infine, estrate l'archivio string-examples.war da cui a sua volta estraete il file \WEB-INF\lib\commons-lang-2.0.jar che va anch'esso copiato nella cartella <inizialeCognome>\WEB-INF\lib. Ricordatevi di fare il reload dell'applicazione da Tomcat Manager.

Durante lo sviluppo sarà certamente utile consultare la documentazione relativa alle varie librerie di tag.

Per quanto riguarda la string tag library, la documentazione si trova al sito: http://jakarta.apache.org/taglibs/doc/string-doc/string-1.1.0/index.html.

Note JSTL

E' importante notare che nella implementazione ufficiale esiste più di una versione di ciascuna libreria. Ad esempio esiste la libreria core e la libreria core_rt. La prima è quella utilizzata di defualt, mentre la seconda è la cosidetta libreria "run time". Spesso troverete anche la seconda sui libri di testo ed esempi. Che differenza c'e tra le due?

In una pagina JSP, anche se non si dovrebbe fare, può accadere di mischiare scriptlet e TAG JSTL. Un problema evidente in queste situazioni è quello di riuscire ad accedere ad un oggetto istanziato in una scriptlet JSP da parte di un TAG JSTL. Infatti i tag non possono accedere alle variabili locali della pagina! Per farlo, dobbiamo inserire questi oggetti manualmente nel contesto dati opportuno, ad esempio quello di pagina. Vediamo un esempio, JSTLExchange.jsp.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
  <head>
  <title>Esempio di scambio dati tra scriptlet e TAG JSTL</title>
  </head>
  <body>
    <c:if test="${empty param.parola}">
      <form action="${pageContext.request.requestURI}" method="post">
      <h3>Calcola la lunghezza di una parola!</h3>
      Inserisci la parola di cui vuoi calcolare la lunghezza <br/> 
      <input type="text" name="parola">
      <input type="submit" value="Invia!">
      </form>
    </c:if>
    <c:if test="${not empty param.parola}">
      Hai inserito: <b>${param.parola}</b><br/>
      <%-- 
      Per calcolare la lunghezza della parola mi basterebbe
      utilizzare il tag length della string tag library. Ad esempio:
      
      <%@ taglib uri='WEB-INF/taglibs-string.tld' prefix='str'%>
      <str:length var="lunghezzaParola">${param.parola}</str:length>
      
      Supponiamo però di voler utilizzare un metodo Java direttamente.
      Vediamo come fare ad utilizzare in un Tag JSTL un oggetto
      locale alla pagina:
      --%>
      <% 
        String parametroUtente = request.getParameter("parola");
        int numeroCaratteri = parametroUtente.length();
        pageContext.setAttribute("lunghezzaParola", new Integer(numeroCaratteri));
          //  lunghezzaParola è stata inserita nel pageScope. Se ad esempio
          //  aveste preferito inserirla nel sessionScope, avreste dovuto utilizzare:
          //  pageContext.setAttribute("lunghezzaParola", 
          //      new Integer(numeroCaratteri), PageContext.SESSION_SCOPE);
          //  A seconda dello scope prescelto dovete utilizzare
          //  pageScope.lunghezzaParola o sessionScope.lunghezzaParola
          //  Se non indicate il contesto la variabile viene cercata in tutti.
      %>
      La parola è composta da <b>${lunghezzaParola}</b> caratteri.<br/>
      <a href="${pageContext.request.requestURI}">Clicca qui</a>, 
      se vuoi utilizzare questo sito nuovamente.
    </c:if>
  </body>
</html>


Esercizi per il laboratorio

Esercizio 0

Seguite le note indicate sopra ed installate la JSTL e la string tag library. Quindi copiate i due files BookSelection.jsp e show_book.jsp nella vostra web application e verificate che funzionino correttamente.

Esercizio 1

Scrivere una JSP utilizzando le librerie di tag opportune. La pagina deve presentare all'utente un form in cui egli possa indicare l'URL di una pagina qualunque e una parola a sua scelta. La pagina JSP deve indicare quindi all'utente quante volte la data parola sia comparsa nella pagina indicata. [Suggerimento: utilizzare i tag di manipolazione degli URL ed il tag countMatches della string tag library.]