Connettere una Web Application Java ad un database relazionale SQL

Connettere una Web Application Java ad un database relazionale SQL

In questo articolo vedremo come poter recuperare dei record da un database SQL (utilizziamo PostgreSQL) da una Web Application Java utilizzando le JavaServer Pages (JSP) come tecnologia Web. Per poter accedere ad un Database SQL da codice Java è necessario ottenere un driver JDBC. Le API Java JDBC consentono alle applicazioni Java di connettersi ad un database relazionale tramite un'API standard, rendendo le applicazioni Java indipendenti (o quasi) dall'implementazione di database scelta per l'applicazione. In particolare JDBC standardizza come connettersi ad un database, come eseguire query su di esso, come navigare il risultato di una query, e come eseguire gli update del database, mentre non standardizza la sintassi SQL inviata al database. Questa può variare da database a database.

MySQL Installer for Windows: un pacchetto software per installare e configurare MySQL su Windows
IBM Data Studio
Come reimpostare la password di root di MySQL Server

La prima pagina utilizza le taglib jstl; la JavaServer Pages Standard Library (JSTL) è una raccolta di utili tag JSP che incapsulano le funzionalità di base comune a molte applicazioni JSP.  JSTL ha il supporto per  i costrutti di controllo di flusso come le iterazioni e le condizioni, i tag per la manipolazione di documenti XML, tag di internazionalizzazione e tag SQL. I tag JSTL possono essere classificati, in base alle loro funzioni, nei seguenti gruppi:

  • Core Tags
  • Formatting tags
  • SQL tags
  • XML tags
  • JSTL Functions

Quelli che andremo ad utilizzare nel nostro esempio sono i Core Tags e gli SQL tags. Prima di procedere scarichiamo la libreria dal seguente indirizzo:

http://central.maven.org/maven2/javax/servlet/jstl/1.2/jstl-1.2.jar

Una volta scaricata la libreria .jar, la inseriamo (insieme a quella dei driver JDBC per PostgreSQL ) nella cartella WEB-INF/lib.

Dall’IDE Eclipse creiamo una pagina JSP dal nome taglib.jsp, la quale importerà i due gruppi Core ed SQL tramite la direttiva jsp import:

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

così facendo possiamo utilizzare i tag all’interno della pagina jsp. Per poter eseguire una query SQL utilizziamo la taglib sql, effettuando una select sulla tabella Anagrafica, all’interno del suo body:

<sql:query var="rs" dataSource="jdbc/postgres">
select nome, cognome, eta from anagrafica order by id
</sql:query>

la variabile rs (di tipo Result) dell’attibuto var, contiene i risultati della query. Utilizzando il metodo getRows() della classe Result otteniamo le righe della tabella Anagrafica (per esser precisi un array di oggetti Map), per fare ciò utilizziamo le taglib Core:

<c:forEach var="row" items="${rs.rows}">
Nome: ${row.nome}
Cognome: ${row.cognome}
Età: ${row.eta}
</c:forEach>

il linguaggio JSTL converte automaticamente la sintassi ${rs.rows} in una chiamata a rs.getRows(). Quando forniamo un array di Map al tag forEach, l’attributo var del tag è di tipo Map. Per recuperare le informazioni da una Map, bisogna utilizzare il metodo get(“nomeColonna”) per ottenere un valore di una data colonna. Il linguaggio JSTL converte la sintassi ${map.nomeColonna} in una chiamata a map.get (“nomeColonna”).

La pagina JSP completa taglib.jsp è riportata di seguito (da copiare nella cartella WebContent):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Esempio Taglib JSTL</title>
</head>
<body>
<sql:query var="rs" dataSource="jdbc/postgres">
select nome, cognome, eta from anagrafica order by id
</sql:query>
<h2>Anagrafica:</h2>
<ul>
<c:forEach var="row" items="${rs.rows}">
<li>
 Nome: ${row.nome}<br/>
 Cognome: ${row.cognome}<br/>
 Età: ${row.eta}<br/>
</li>
</c:forEach>
</ul>
 </body>
</html>

La seconda pagina JSP javacode.jsp di esempio utilizza del codice Java “puro” all’interno dei tag <% %> JSP. L’esempio completo è riportato di seguito:

<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Esempio Java Core</title>
</head>
 <body>
 <%
 Context initCtx = new InitialContext();
 Context envCtx = (Context) initCtx.lookup("java:comp/env");
 DataSource ds = (DataSource)
 envCtx.lookup("jdbc/postgres");
 Connection conn=null;
 PreparedStatement pstmt;
 String nome="";
 String cognome="";
 String eta="";
 try {
 conn = ds.getConnection();
 conn.setAutoCommit(false);
 pstmt = conn.prepareStatement("select nome,cognome,eta from anagrafica where id = ?");
 pstmt.setFloat(1, 1);
 pstmt.execute();
 ResultSet rs = pstmt.getResultSet();
 while (rs.next()) {
 nome = rs.getString(1);
 cognome = rs.getString(2);
 eta = rs.getString(3);
 }
 conn.commit();
 pstmt.close();
 }
 finally{
 conn.close();
 }
 %>
 <% //out.print("Risultato : "+result);
 %> 
 <ul>
 <li>
 <%=nome%>
 <%=cognome%>
 <%=eta%>
 </li>
 </ul>
 </body>
</html>

Infine possiamo creare una pagina iniziale index.html che ci permette di scegliere quale dei due esempi lanciare:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test JDBC Connection</title>
</head>
<body>
<h2>Test Connessioni JDBC</h2>
<p><a href="./taglib.jsp">Taglib JSTL Example</a></p>
<p><a href="./javacode.jsp">Java Code Example</a></p>
</body>
</html>

L’albero delle directory finale conterrà i seguenti file:

Struttura directory della Web Application realizzata

Struttura directory della Web Application realizzata

E’ possibile scaricare il .war dell’applicazione completa cliccando sul seguente link:

download Scarica Applicazione

E’ inoltre possibile visualizzare l’applicazione (attualmente è ospitata su Amazon Elastic Compute Cloud, Amazon EC2 ) cliccando sul seguente link:

run Avvia Applicazione

PAGES

1 2

COMMENTS

WORDPRESS: 0
DISQUS: 0