Laboratorio di Sistemi Fondamenti di JSTL (parte 3) Java (JSTL

Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
Concludiamo questa nostra carrellata tra le azioni JSTL, presentando ora un piccolo applicativo
che fa uso delle librerie JSTL e di un database MySQL (si legga l'articolo “DAO (MySQL)”,
http://www.mauriziocozzetto.net/pdf/DAO_MySQL.pdf). In questo esempio, inseriamo le
informazioni sulla connessione al database biblio_db nel file web.xml (deployment descriptor)
invece che nella pagina web mediante l'azione sql:setDataSource. Questo rende l'applicativo
più snello e più sicuro.
File web.xml
.....
<context-param>
<param-name>
javax.servlet.jsp.jstl.sql.dataSource
</param-name>
<param-value>
jdbc:mysql://localhost:3306/biblio_db,com.mysql.jdbc.Driver,prova,prova
</param-value>
</context-param>
....
Osserviamo intanto il funzionamento dell'applicativo.
Fig. 1 – La pagina index.jsp dell'applicativo BibliotecaJSTLWebApp
JSTL-parte3.pdf
Pag. 1/6
Cozzetto ©
Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
Fig. 2 – I libri scritti da Fabrizio Ferrari
Fig. 3 – Il libro scritto da Michael Bowers
JSTL-parte3.pdf
Pag. 2/6
Cozzetto ©
Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
Fig. 4 – Il dettaglio del libro di Michael Bowers
File index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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=UTF-8">
<title>Libri scritti da un certo autore</title>
<style type="text/css">
body,td,th {
font-family: Verdana;
font-size: 16px;
}
</style>
</head>
<body>
<h3>Libri scritti da un certo autore</h3>
<sql:query var="result">
SELECT Concat(RTrim(autori_tbl.nome),' ',RTrim(autori_tbl.cognome)) AS anagrafica
FROM autori_tbl
</sql:query>
JSTL-parte3.pdf
Pag. 3/6
Cozzetto ©
Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
<p>
<form name="provaFrm" action="${request.requestURI}" method="GET">
<select name="autoreMnu">
<c:forEach var="row" items="${result.rows}">
<!-- caricamento delle anagrafiche nella combobox autoreMnu -->
<option value="${row.anagrafica}">${row.anagrafica}</option>
</c:forEach>
</select>
<input type="submit" name="inviaBtn" value="Invia"/>
</form>
</p>
<p>
<c:if test="${!empty param.inviaBtn}">
<sql:query var="result">
SELECT * FROM libri_tbl, autori_tbl, editori_tbl WHERE autori_tbl.idAutore =
libri_tbl.idAutore AND editori_tbl.idEditore = libri_tbl.idEditore AND
Concat(RTrim(autori_tbl.nome)," ",RTrim(autori_tbl.cognome)) = "${param.autoreMnu}"
</sql:query>
<c:choose>
<c:when test="${result.rowCount>0}">
<c:forEach var="row" items="${result.rows}">
<c:out value="${row.isbn}"/> | <c:out value="${row.titolo}"/> | <c:out
value="${row.nomeEditore}"/> | <a href="index2.jsp?isbn=${row.isbn}">Dettagli</a> <br/
>
</c:forEach>
</c:when>
<c:otherwise>
Non ci sono libri scritti da <c:out value="${param.autoreMnu}" />
</c:otherwise>
</c:choose>
</c:if>
</p>
</body>
</html>
Nel codice precedente, request.requestURI restituisce dinamicamente il nome della pagina web
(index.jsp). Cambiando eventualmente il nome della pagina, non dobbiamo aggiornare il valore
della proprietà action del form.
Param invece indica la Collection di variabili del form, mentre result.rows denota il resultset
della query di lettura e result.rowCount restituisce il numero di righe del resultset.
JSTL-parte3.pdf
Pag. 4/6
Cozzetto ©
Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
File index2.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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=UTF-8">
<title>Accesso al database biblio_db</title>
<style type="text/css">
body,td,th {
font-family: Verdana;
font-size: 16px;
border: 0px;
}
.sinistra {
float: left;
margin-right: 9px;
margin-bottom: 9px;
}
</style>
</head>
<body>
<h3>Dettagli libro</h3>
<c:choose>
<c:when test="${!empty param.isbn}">
<sql:query var="result">
SELECT * FROM libri_tbl, autori_tbl, editori_tbl WHERE autori_tbl.idAutore =
libri_tbl.idAutore AND editori_tbl.idEditore = libri_tbl.idEditore AND libri_tbl.isbn = "$
{param.isbn}"
</sql:query>
<c:choose>
<c:when test="${result.rowCount==1}">
<c:set var="row" value="${result.rows[0]}"/>
<c:if test="${!empty row.imgUrl}"><img src="img/${row.imgUrl}"
class="sinistra"/></c:if>
<i>Isbn:</i> <c:out value="${row.isbn}"/><br/>
<i>Autore:</i> <c:out value="${row.nome} ${row.cognome}"/><br/>
<i>Titolo:</i> <c:out value="${row.titolo}"/><br/>
<i>Editore:</i> <c:out value="${row.nomeEditore}"/><br/><br/>
<i>Introduzione:</i> <c:out value="${row.intro}"/>
</c:when>
JSTL-parte3.pdf
Pag. 5/6
Cozzetto ©
Laboratorio di Sistemi
Fondamenti di JSTL (parte 3)
Java (JSTL)
<c:otherwise>
<jsp:forward page="index.jsp"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<jsp:forward page="index.jsp"/>
</c:otherwise>
</c:choose>
</body>
</html>
In questo caso, result.rowCount vale 1 siccome c'è una sola riga (il libro con l'isbn assegnato)
e questa è indicata con result.rows[0].
Jsp:forward invece riporta l'utente verso la pagina index.jsp.
L'applicativo ovviamente presenta ancora molti margini di miglioramento, tuttavia, trattandosi
di un esempio, abbiamo preferito lasciare così il codice (ad esempio manca una gestione degli
errori) per questioni di semplicità e leggibilità.
JSTL-parte3.pdf
Pag. 6/6
Cozzetto ©