際際滷

際際滷Share a Scribd company logo
Installing ApacheTomcat
with NetBeans
 ApacheTomcat
 Componenti di ApacheTomcat
 Web Application
 Componenti di unWeb Application
 Configurazione ambiente con Netbeans 8.x
 Server Apache
 Database
 Esempio di Registrazione e Login
 Tomcat Web Application Manager
Sommario
 Scaricare Java SDK
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-
2133151.html
 Scaricare Netbeans
https://netbeans.org/downloads/
 Scaricare la versione MySQL Server (32-64 bit)
https://dev.mysql.com/downloads/mysql/
Prima di iniziare...
Scaricare e installare Java SDK
 Scaricare Java SDK dal seguente link:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
 Scaricare Netbeans:
https://netbeans.org/downloads/
Scaricare Netbeans
Installare Netbeans
ModelView Controller (MVC)
MVC e un utile pattern architetturale per la separazione dei compiti di un
software.
 Model: Plain OldJavaScript Object (POJO) che trasporta i dati.
 View: livello nel quale i dati sono rappresentanti in formato visuale.
 Controller: componente responsabile per la comunicazione tra model e
view.
 ApacheTomcat e un Application Server basato su Java Servlet
 Tomcat implementa diverse specifiche:
 Java Servlet
 JavaServer Pages (JSP)
 ect
Cose ApacheTomcat ?
(Client)
Browser
(Controller)
Servlet
(View)
JSP
(Model)
Java
Beans
Enterprise
Servers/
Data
sources
Architettura MVC
1. Catalina
 Contenitore di Servlet Java diTomcat
 Fornisce leffettiva implementazione diTomcat, delle specifiche della
Servlet.
2. Coyote
 Componente connettore HTTP diTomcat
 Supporta il protocollo HTTP per il Web Server
 Ascolta le connessioni in entrata su una specifica portaTCP, inoltra la
richiesta al motoreTomcat e processa la richiesta e manda indietro la
risposta al client.
3. Jasper
 Analizza e converte le porzioni di codice allinterno delle pagine JSP in
Servlet e le passa a Catalina per processarle
 Quando lanciato, cerca eventuali cambiamenti avvenuti ai file JSP e, se
necessario li ricompila.
Componenti diTomcat
 Un Web component e un oggetto che estende le funzionalita di
unWeb Server aggiugendone di nuove:
 Servlet
 Java Server Pages (JSP)
 ecc
 I Web component sono in grado di accedere ai servizi offerti da un
Web container come:
 Smistamento delle richieste
 Sicurezza
 Concorrenza
 Gestione della memoria
Componenti di un Web Application (WA)
 E una classe scritta in linguaggio Java che estende le capacit di un
server.
 Le funzionalit principali di una Servlet sono:
 Elaborazione o memorizzazione di dati provenienti da form HTML;
 Generazione di contenuti dinamici (pagine Web) a seconda dei parametri
della richiesta inviata;
 Gestione delle informazioni di stato che non esistono nel protocollo HTTP
stateless.
 Comunicano attraverso un qualsiasi protocollo Client-Server, ma sono
principalmente utilizzate con il protocollo HTTP.
Java Servlet (Controller)
 JSP e una tecnologia di programmazione Web in Java per lo
sviluppo diWA.
 Forniscono contenuti dinamici in formato HTML o XML.
 Si basa su un insieme di tag speciali con cui possono essere
invocate funzioni predefinite o codice Java (e.g., <% %>).
 Puo essere vista come una rappresentazione ad alto livello di
una Servlet.
Java Server Page (View)
 Classe che incapsula molti oggetti in un singolo oggetto (bean).
 Classe Java appositamente costruita e programmata in accordo alle
specifiche delle API di JavaBeans.
 Oggetti serializzabili che permettono laccesso a diverse proprieta
attraverso i cosiddetti metodi getter e setter.
 Il modello rappresenta un oggetto POJO per il trasporto dei dati.
JavaBeans (Model)
Vantaggi Svantaggi
Controllo delle proprieta, eventi e metodi dei
beans esposti ad altre applicazioni.
E soggetto ad essere instanziato con un stato
invalido avendo un costruttore nullo.
Registra eventi da altri oggetti e puo generare
eventi da poter inviare ad altri oggetti.
Sono oggetti intrinsecamente mutabili mancando
cosi del vantaggio offerto dagli oggetti
immutabili.
Impostazioni di configurazione di un bean
possono essere memorizzati in modo persistente.
Il possedere molti metodi getter e setter puo
portare una quantita immensa di boilerplate code.
 Una volta lanciato Netbeans...
 Creare un nuovo progetto: JavaWeb-> Web Application
Configurazione dellambiente
 Se non presente di default, aggiungere il Server ApacheTomcat 8.x
 e modificare le credenziali utente diTomcat
Configurazione dellambiente
 Selezionare la voce Services -> Cliccare su Properties
Configurare il Server ApacheTomcat
 Selezionare la voce Services -> Cliccare su Start
Lanciare il Server ApacheTomcat
 Permettere laccesso in rete di Java e Netbeans.
Configurare i ruoli daccesso aTomcat
 Aprire il file tomcat-users.xml al path precedentemente copiato
 Inserire la seguente riga in basso al file:
 <user username=... password=... roles=manager-script,admin-gui,manager-gui />
Accedere alla GUI di ApacheTomcat
 Aprire un browser e accedere al server locale diTomcat allindirizzo:
localhost:<server port> (e.g., localhost:9090)
 Server Status: GUI per il
monitoraggio delle risorse
occupate dalla/e WA.
 Manager App: GUI per la
visualizzazione dei dettagli
di una sessione e/o per la
rimozione di
attributi/variabili di
sessione.
Installare MySQL Server
1. Lanciare linstaller;
2. Scegliere come tipologia di installazione qualle custom;
3. Scegliere come prodotti:
1. MySQL Server 5.x
2. Connector/J 5.x
4. Impostare la password per lutente root;
5. Aggiungere (eventualmente) un nuovo utente con relativa
password;
6. Applicare/eseguire le configurazioni impostate.
Nota: In alternativa allo stesso modo di MySQL Server e possibile
utilizzare la versione di JavaDB pre-installata in Netbeans.
Configurazione Database Netbeans
 Una volta scaricato e installato MySQL Server, effettuare i
seguenti steps:
1. Services -> Register MySQL Server;
2. Inserire il nome dellutente e password amministratore
impostati nella fase dinstallazione;
3. Cliccare Admin Properties ed inserire il path delleseguibile di
MySQL (mysqld.exe) alla voce Path to start command;
4. Connettersi al database, creare un database di test e
concedere allutente tutti i permessi al db appena creato.
5. Infine connettersi al database.
Configurazione Database Netbeans (cont.)
 Creare una nuova tabella con gli attributi sotto riportati
Attributi
Name <VARCHAR>
Surname <VARCHAR>
City <VARCHAR>
University <VARCHAR>
Phone <VARCHAR>
Mail <VARCHAR>
Password <VARCHAR>
Configurazione Database Netbeans (cont.)
 Aggiungere i driver JDBC all progetto
 I driver JDBC Mysql sono al path:
C:Program FilesNetBeans 8.2idemodulesextmysql-connector-java-5.1.23-bin.jar
Esempio di Registrazione e Login
 In questo semplice esempio vedremo come gestire:
1. Registrazione utente
2. Login utente
3. Visualizzazione utenti
 Sara creata:
 Una classe Database per effettuare semplici operazioni di
connessione al db, inserimento e reperimento dati da esso.
 Diverse pagine JSP per la gestione dellinterfaccia grafica
dellaWA.
 Infine alcune Servlet per lelaborazione dei dati ricevuti dal
front-end.
Singleton Class Database (1)
package classes;
import java.sql.*;
import java.util.logging.*;
public class Database {
//static reference to itself
private static Database dbIsntance;
public static final String URL = "jdbc:mysql://localhost/test;
public static final String USER = <tuo_utente>";
public static final String PASSWORD = <tua_password>";
public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static Connection con ;
private static Statement stmt;
private Database() { /* private constructor*/ }
1. Creare un proprio package (e.g., classes) nella cartella Source
Packages
2. Creare la Classe Database nel package appena creato
Singleton Class Database (2)
public static Database getInstance(){
if(dbIsntance == null) {
dbIsntance = new Database();
}
return dbIsntance;
}
public Connection getConnection(){
if(con==null) {
try {
Class.forName(DRIVER_CLASS);
con = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException | ClassNotFoundException ex) {
Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
}
}
return con;
}
}
JSP per SignUp
<%
session = request.getSession();
String flash_message = (String) session.getAttribute("flash_message");
%>
</head>
<div class="container">
<div class="row>
<% if (flash_message=="1") {%>
<div class="alert alert-success text-center>
<b>Registrazione effettuata con successo!</b>
<button type="button" class="close" data-dismiss="alert"></button>
</div>
<%}%>
<form id="register-form" action="SignUp" method="post" role="form" style="display: none;>
<div class="form-group>
<input type="text" name="name" id=name" tabindex="1" class="form-control" placeholder="Name" value="">
</div>

<div class="form-group">
<div class="row>
<div class="col-sm-6 col-sm-offset-3>
<input style="background-color: #029f5b" type="submit" name="register-submit" id="register-submit" tabindex="4"
class="form-control btn btn-register" value="Register Now>
</div>
</div>
</div>

</form>
Servelet Class SignUp
public class SignUp extends HttpServlet {
private HttpSession session;
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try {
session = request.getSession();
String name = request.getParameter("name");

String password = request.getParameter("password");
ArrayList<String> credential = new ArrayList<String>();
credential.add(name);

credential.add(password);
Connection con = Database.getInstance().getConnection("test");
Database.getInstance().insertRow("users_db", credential);
session.setAttribute("flash_message", "1");
request.getServletContext().getRequestDispatcher("/first_page.jsp").forward(request, response);
} catch (SQLException ex) {
Logger.getLogger(SignUp.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
JSP per Login
<%
session = request.getSession();
String flash_message = (String) session.getAttribute("flash_message");
%>
</head>
<div class="container">
<div class="row>
<% if (flash_message==0") {%>
<div class="alert alert-success text-center>
<b>Nome utente o password errata!</b>
<button type="button" class="close" data-dismiss="alert"></button>
</div>
<%}%>
<form id="register-form" action=CheckUser" method="post" role="form" style="display:block;>
<div class="form-group>
<input type="text" name=mail" id=name" tabindex="1" class="form-control" placeholder=mail" value="">
</div>
<div class="form-group>
<input type=password" name=password" id=password" tabindex="1" class="form-control" placeholder=Password" value="">
</div>
<div class="form-group">
<div class="row>
<div class="col-sm-6 col-sm-offset-3>
<input style="background-color: #029f5b" type="submit" name=login-submit" id=login-submit" tabindex="4" class="form-
control btn btn-login" value=Log In>
</div>
Servlet Class Check User
public class Check User extends HttpServlet {
private HttpSession session;
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try {
session = request.getSession();
String mail = request.getParameter("mail");
String password = request.getParameter("password");
Database.getInstance().getConnection("test");
if (Database.getInstance().checkUser(mail, password) == 1) {
Map<String, String> info_user = Database.getInstance().getInfo("users", "mail", mail);
session.setAttribute("info_user", info_user);
getServletContext().getRequestDispatcher("/profile.jsp").forward(request, response);
}
else{
session.setAttribute("flash_message", "0");
getServletContext().getRequestDispatcher("/first_page.jsp").forward(request, response);
}
} catch (SQLException ex) {
Logger.getLogger(CheckUser.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
JSP per Profile
<% session = request.getSession();
HashMap<String, String> info_user = (HashMap<String, String>) session.getAttribute("info_user");
%>
</head>
<div class="container>

<div class="row">
<div class="col-sm-6 col-md-4>
<img src=/slideshow/installing-apache-tomcat-with-netbeans/70829874/"http:/placehold.it/380x500" alt="" class="img-rounded img-responsive" />
</div>
<div class="col-sm-6 col-md-8">
<h4> <% out.print(info_user.get("name") + " " + info_user.get("surname")); %> </h4>
<small><cite title="San Francisco, USA"> <%out.print(info_user.get("city"));%>, ITA <i class="glyphicon glyphicon-map-
marker></i></cite></small>
<p>
<i class="glyphicon glyphicon-phone-alt"></i><%out.print(info_user.get("phone"));%>
<br/>
<i class="glyphicon glyphicon-home"></i><%out.print(info_user.get("university"));%>
<br/>
<i class="glyphicon glyphicon-envelope"></i><%out.print(info_user.get("mail"));%>
<br/>
<!-- Split button -->
<div class="btn-group">
<button type="button" class="btn btn-primary">View all users</button>
</div>
</div>
</div>

</div>
JSP per user_table_page
<%
ArrayList<Map<String, String>> data = Database.getInstance().getAllRows("users");
%>
</head>
<div id="wrapper>
<h1>User Table</h1>
<table id="keywords" cellspacing="0" cellpadding=0">
<thead>
<tr>
<th><span>Name</span></th>
<th><span>Surname</span></th>
<th><span>City</span></th>
<th><span>University</span></th>
<th><span>Phone</span></th>
<th><span>Mail</span></th>
</tr>
</thead>
<tbody>
<%
for (int i = 0; i < data.size(); i++) {
out.print("<tr>");
out.print("<td class=lalign>" + data.get(i).get("name") + "</td>);
out.print("<td>" + data.get(i).get("surname") + "</td>");
out.print("<td>" + data.get(i).get("city") + "</td>);
out.print("<td>" + data.get(i).get("university") + "</td>");
out.print("<td>" + data.get(i).get("phone") + "</td>");
out.print("<td>" + data.get(i).get("mail") + "</td>");
out.print("</tr>");
}
%>
</tbody>
</table>
</div>
Esercizio
 Implementare un classe Servlet per la gestione del LogOut di un
utente
 Rimozione della sessione
 Redirezione alla pagina di login
WEB-INF: file di configurazione
web.xml: descrittore di distribuzione della WA.
 Descrive le servlets e gli altri componenti che compongono laWA.
 Utilizzato per limpostazione dei parametri dinizializzazione e per i vincoli
di sicurezza che si vuole fare rispettare allaWA.
Note: nel caso in cui tale file non sia disponibile nella cartellaWEB-INF al path: web/WEB-INF
del progetto, e possibile reperirlo dal materiale messo a disposizione sulla piattaforma
modificandolo appropriatemente.
classes: cartella contenente i file delle classi Java richieste dallaWA, che
include entrambe le classi Servlet e non-Servlet.
lib: cartella dei file JAR, contenenti i file delle classi JAVA richieste per laWA.
 Librerie di classi di terze parti e/o driver JDBC.
WEB-INF: file di configurazione (cont.)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-
app_3_0.xsd">
<display-name>MyFirstWebApp</display-name>
<welcome-file-list>
<welcome-file>first_page.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SignUp</servlet-name>
<servlet-class>servlets.SignUp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SignUp</servlet-name>
<url-pattern>/SignUp</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
Tomcat Web Application Manager
 Path: URL dellaWA
 Sessions: numero di sessioni dellaWA create
 Commands: sezione per la gesione dellaWA
Tomcat Web Application Manager
 WAR file to deploy: sezione per lupload della WA
Riferimenti
 ApacheTomcat, JavaBeans e JDBC
1. https://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_HowTo.html
(Windows and Unix)
2. https://wolfpaulus.com/journal/mac/tomcat8/ (OS X)
3. https://www.mulesoft.com/tcat/tomcat-linux (Linux)
4. https://www.tutorialspoint.com/jsp/jsp_java_beans.htm (JavaBeans)
5. http://www.java-samples.com/showtutorial.php?tutorialid=552 (JavaBeans)
6. http://theopentutorials.com/tutorials/java/jdbc/jdbc-examples-introduction/ (JDBC
example)
7. https://netbeans.org/kb/docs/ide/java-db.html (Java DB Derby)
Contatti:
davide.nardone@studenti.uniparthenope.it
Laboratorio di Architettura e Sistemi IV piano lato NORD, stanza 432.

More Related Content

Installing Apache tomcat with Netbeans

  • 2. ApacheTomcat Componenti di ApacheTomcat Web Application Componenti di unWeb Application Configurazione ambiente con Netbeans 8.x Server Apache Database Esempio di Registrazione e Login Tomcat Web Application Manager Sommario
  • 3. Scaricare Java SDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads- 2133151.html Scaricare Netbeans https://netbeans.org/downloads/ Scaricare la versione MySQL Server (32-64 bit) https://dev.mysql.com/downloads/mysql/ Prima di iniziare...
  • 4. Scaricare e installare Java SDK Scaricare Java SDK dal seguente link: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • 7. ModelView Controller (MVC) MVC e un utile pattern architetturale per la separazione dei compiti di un software. Model: Plain OldJavaScript Object (POJO) che trasporta i dati. View: livello nel quale i dati sono rappresentanti in formato visuale. Controller: componente responsabile per la comunicazione tra model e view.
  • 8. ApacheTomcat e un Application Server basato su Java Servlet Tomcat implementa diverse specifiche: Java Servlet JavaServer Pages (JSP) ect Cose ApacheTomcat ? (Client) Browser (Controller) Servlet (View) JSP (Model) Java Beans Enterprise Servers/ Data sources Architettura MVC
  • 9. 1. Catalina Contenitore di Servlet Java diTomcat Fornisce leffettiva implementazione diTomcat, delle specifiche della Servlet. 2. Coyote Componente connettore HTTP diTomcat Supporta il protocollo HTTP per il Web Server Ascolta le connessioni in entrata su una specifica portaTCP, inoltra la richiesta al motoreTomcat e processa la richiesta e manda indietro la risposta al client. 3. Jasper Analizza e converte le porzioni di codice allinterno delle pagine JSP in Servlet e le passa a Catalina per processarle Quando lanciato, cerca eventuali cambiamenti avvenuti ai file JSP e, se necessario li ricompila. Componenti diTomcat
  • 10. Un Web component e un oggetto che estende le funzionalita di unWeb Server aggiugendone di nuove: Servlet Java Server Pages (JSP) ecc I Web component sono in grado di accedere ai servizi offerti da un Web container come: Smistamento delle richieste Sicurezza Concorrenza Gestione della memoria Componenti di un Web Application (WA)
  • 11. E una classe scritta in linguaggio Java che estende le capacit di un server. Le funzionalit principali di una Servlet sono: Elaborazione o memorizzazione di dati provenienti da form HTML; Generazione di contenuti dinamici (pagine Web) a seconda dei parametri della richiesta inviata; Gestione delle informazioni di stato che non esistono nel protocollo HTTP stateless. Comunicano attraverso un qualsiasi protocollo Client-Server, ma sono principalmente utilizzate con il protocollo HTTP. Java Servlet (Controller)
  • 12. JSP e una tecnologia di programmazione Web in Java per lo sviluppo diWA. Forniscono contenuti dinamici in formato HTML o XML. Si basa su un insieme di tag speciali con cui possono essere invocate funzioni predefinite o codice Java (e.g., <% %>). Puo essere vista come una rappresentazione ad alto livello di una Servlet. Java Server Page (View)
  • 13. Classe che incapsula molti oggetti in un singolo oggetto (bean). Classe Java appositamente costruita e programmata in accordo alle specifiche delle API di JavaBeans. Oggetti serializzabili che permettono laccesso a diverse proprieta attraverso i cosiddetti metodi getter e setter. Il modello rappresenta un oggetto POJO per il trasporto dei dati. JavaBeans (Model) Vantaggi Svantaggi Controllo delle proprieta, eventi e metodi dei beans esposti ad altre applicazioni. E soggetto ad essere instanziato con un stato invalido avendo un costruttore nullo. Registra eventi da altri oggetti e puo generare eventi da poter inviare ad altri oggetti. Sono oggetti intrinsecamente mutabili mancando cosi del vantaggio offerto dagli oggetti immutabili. Impostazioni di configurazione di un bean possono essere memorizzati in modo persistente. Il possedere molti metodi getter e setter puo portare una quantita immensa di boilerplate code.
  • 14. Una volta lanciato Netbeans... Creare un nuovo progetto: JavaWeb-> Web Application Configurazione dellambiente
  • 15. Se non presente di default, aggiungere il Server ApacheTomcat 8.x e modificare le credenziali utente diTomcat Configurazione dellambiente
  • 16. Selezionare la voce Services -> Cliccare su Properties Configurare il Server ApacheTomcat
  • 17. Selezionare la voce Services -> Cliccare su Start Lanciare il Server ApacheTomcat Permettere laccesso in rete di Java e Netbeans.
  • 18. Configurare i ruoli daccesso aTomcat Aprire il file tomcat-users.xml al path precedentemente copiato Inserire la seguente riga in basso al file: <user username=... password=... roles=manager-script,admin-gui,manager-gui />
  • 19. Accedere alla GUI di ApacheTomcat Aprire un browser e accedere al server locale diTomcat allindirizzo: localhost:<server port> (e.g., localhost:9090) Server Status: GUI per il monitoraggio delle risorse occupate dalla/e WA. Manager App: GUI per la visualizzazione dei dettagli di una sessione e/o per la rimozione di attributi/variabili di sessione.
  • 20. Installare MySQL Server 1. Lanciare linstaller; 2. Scegliere come tipologia di installazione qualle custom; 3. Scegliere come prodotti: 1. MySQL Server 5.x 2. Connector/J 5.x 4. Impostare la password per lutente root; 5. Aggiungere (eventualmente) un nuovo utente con relativa password; 6. Applicare/eseguire le configurazioni impostate. Nota: In alternativa allo stesso modo di MySQL Server e possibile utilizzare la versione di JavaDB pre-installata in Netbeans.
  • 21. Configurazione Database Netbeans Una volta scaricato e installato MySQL Server, effettuare i seguenti steps: 1. Services -> Register MySQL Server; 2. Inserire il nome dellutente e password amministratore impostati nella fase dinstallazione; 3. Cliccare Admin Properties ed inserire il path delleseguibile di MySQL (mysqld.exe) alla voce Path to start command; 4. Connettersi al database, creare un database di test e concedere allutente tutti i permessi al db appena creato. 5. Infine connettersi al database.
  • 22. Configurazione Database Netbeans (cont.) Creare una nuova tabella con gli attributi sotto riportati Attributi Name <VARCHAR> Surname <VARCHAR> City <VARCHAR> University <VARCHAR> Phone <VARCHAR> Mail <VARCHAR> Password <VARCHAR>
  • 23. Configurazione Database Netbeans (cont.) Aggiungere i driver JDBC all progetto I driver JDBC Mysql sono al path: C:Program FilesNetBeans 8.2idemodulesextmysql-connector-java-5.1.23-bin.jar
  • 24. Esempio di Registrazione e Login In questo semplice esempio vedremo come gestire: 1. Registrazione utente 2. Login utente 3. Visualizzazione utenti Sara creata: Una classe Database per effettuare semplici operazioni di connessione al db, inserimento e reperimento dati da esso. Diverse pagine JSP per la gestione dellinterfaccia grafica dellaWA. Infine alcune Servlet per lelaborazione dei dati ricevuti dal front-end.
  • 25. Singleton Class Database (1) package classes; import java.sql.*; import java.util.logging.*; public class Database { //static reference to itself private static Database dbIsntance; public static final String URL = "jdbc:mysql://localhost/test; public static final String USER = <tuo_utente>"; public static final String PASSWORD = <tua_password>"; public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; private static Connection con ; private static Statement stmt; private Database() { /* private constructor*/ } 1. Creare un proprio package (e.g., classes) nella cartella Source Packages 2. Creare la Classe Database nel package appena creato
  • 26. Singleton Class Database (2) public static Database getInstance(){ if(dbIsntance == null) { dbIsntance = new Database(); } return dbIsntance; } public Connection getConnection(){ if(con==null) { try { Class.forName(DRIVER_CLASS); con = DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException | ClassNotFoundException ex) { Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex); } } return con; } }
  • 27. JSP per SignUp <% session = request.getSession(); String flash_message = (String) session.getAttribute("flash_message"); %> </head> <div class="container"> <div class="row> <% if (flash_message=="1") {%> <div class="alert alert-success text-center> <b>Registrazione effettuata con successo!</b> <button type="button" class="close" data-dismiss="alert"></button> </div> <%}%> <form id="register-form" action="SignUp" method="post" role="form" style="display: none;> <div class="form-group> <input type="text" name="name" id=name" tabindex="1" class="form-control" placeholder="Name" value=""> </div> <div class="form-group"> <div class="row> <div class="col-sm-6 col-sm-offset-3> <input style="background-color: #029f5b" type="submit" name="register-submit" id="register-submit" tabindex="4" class="form-control btn btn-register" value="Register Now> </div> </div> </div> </form>
  • 28. Servelet Class SignUp public class SignUp extends HttpServlet { private HttpSession session; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try { session = request.getSession(); String name = request.getParameter("name"); String password = request.getParameter("password"); ArrayList<String> credential = new ArrayList<String>(); credential.add(name); credential.add(password); Connection con = Database.getInstance().getConnection("test"); Database.getInstance().insertRow("users_db", credential); session.setAttribute("flash_message", "1"); request.getServletContext().getRequestDispatcher("/first_page.jsp").forward(request, response); } catch (SQLException ex) { Logger.getLogger(SignUp.class.getName()).log(Level.SEVERE, null, ex); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
  • 29. JSP per Login <% session = request.getSession(); String flash_message = (String) session.getAttribute("flash_message"); %> </head> <div class="container"> <div class="row> <% if (flash_message==0") {%> <div class="alert alert-success text-center> <b>Nome utente o password errata!</b> <button type="button" class="close" data-dismiss="alert"></button> </div> <%}%> <form id="register-form" action=CheckUser" method="post" role="form" style="display:block;> <div class="form-group> <input type="text" name=mail" id=name" tabindex="1" class="form-control" placeholder=mail" value=""> </div> <div class="form-group> <input type=password" name=password" id=password" tabindex="1" class="form-control" placeholder=Password" value=""> </div> <div class="form-group"> <div class="row> <div class="col-sm-6 col-sm-offset-3> <input style="background-color: #029f5b" type="submit" name=login-submit" id=login-submit" tabindex="4" class="form- control btn btn-login" value=Log In> </div>
  • 30. Servlet Class Check User public class Check User extends HttpServlet { private HttpSession session; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try { session = request.getSession(); String mail = request.getParameter("mail"); String password = request.getParameter("password"); Database.getInstance().getConnection("test"); if (Database.getInstance().checkUser(mail, password) == 1) { Map<String, String> info_user = Database.getInstance().getInfo("users", "mail", mail); session.setAttribute("info_user", info_user); getServletContext().getRequestDispatcher("/profile.jsp").forward(request, response); } else{ session.setAttribute("flash_message", "0"); getServletContext().getRequestDispatcher("/first_page.jsp").forward(request, response); } } catch (SQLException ex) { Logger.getLogger(CheckUser.class.getName()).log(Level.SEVERE, null, ex); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
  • 31. JSP per Profile <% session = request.getSession(); HashMap<String, String> info_user = (HashMap<String, String>) session.getAttribute("info_user"); %> </head> <div class="container> <div class="row"> <div class="col-sm-6 col-md-4> <img src=/slideshow/installing-apache-tomcat-with-netbeans/70829874/"http:/placehold.it/380x500" alt="" class="img-rounded img-responsive" /> </div> <div class="col-sm-6 col-md-8"> <h4> <% out.print(info_user.get("name") + " " + info_user.get("surname")); %> </h4> <small><cite title="San Francisco, USA"> <%out.print(info_user.get("city"));%>, ITA <i class="glyphicon glyphicon-map- marker></i></cite></small> <p> <i class="glyphicon glyphicon-phone-alt"></i><%out.print(info_user.get("phone"));%> <br/> <i class="glyphicon glyphicon-home"></i><%out.print(info_user.get("university"));%> <br/> <i class="glyphicon glyphicon-envelope"></i><%out.print(info_user.get("mail"));%> <br/> <!-- Split button --> <div class="btn-group"> <button type="button" class="btn btn-primary">View all users</button> </div> </div> </div> </div>
  • 32. JSP per user_table_page <% ArrayList<Map<String, String>> data = Database.getInstance().getAllRows("users"); %> </head> <div id="wrapper> <h1>User Table</h1> <table id="keywords" cellspacing="0" cellpadding=0"> <thead> <tr> <th><span>Name</span></th> <th><span>Surname</span></th> <th><span>City</span></th> <th><span>University</span></th> <th><span>Phone</span></th> <th><span>Mail</span></th> </tr> </thead> <tbody> <% for (int i = 0; i < data.size(); i++) { out.print("<tr>"); out.print("<td class=lalign>" + data.get(i).get("name") + "</td>); out.print("<td>" + data.get(i).get("surname") + "</td>"); out.print("<td>" + data.get(i).get("city") + "</td>); out.print("<td>" + data.get(i).get("university") + "</td>"); out.print("<td>" + data.get(i).get("phone") + "</td>"); out.print("<td>" + data.get(i).get("mail") + "</td>"); out.print("</tr>"); } %> </tbody> </table> </div>
  • 33. Esercizio Implementare un classe Servlet per la gestione del LogOut di un utente Rimozione della sessione Redirezione alla pagina di login
  • 34. WEB-INF: file di configurazione web.xml: descrittore di distribuzione della WA. Descrive le servlets e gli altri componenti che compongono laWA. Utilizzato per limpostazione dei parametri dinizializzazione e per i vincoli di sicurezza che si vuole fare rispettare allaWA. Note: nel caso in cui tale file non sia disponibile nella cartellaWEB-INF al path: web/WEB-INF del progetto, e possibile reperirlo dal materiale messo a disposizione sulla piattaforma modificandolo appropriatemente. classes: cartella contenente i file delle classi Java richieste dallaWA, che include entrambe le classi Servlet e non-Servlet. lib: cartella dei file JAR, contenenti i file delle classi JAVA richieste per laWA. Librerie di classi di terze parti e/o driver JDBC.
  • 35. WEB-INF: file di configurazione (cont.) <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web- app_3_0.xsd"> <display-name>MyFirstWebApp</display-name> <welcome-file-list> <welcome-file>first_page.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>SignUp</servlet-name> <servlet-class>servlets.SignUp</servlet-class> </servlet> <servlet-mapping> <servlet-name>SignUp</servlet-name> <url-pattern>/SignUp</url-pattern> </servlet-mapping> <session-config> <session-timeout>10</session-timeout> </session-config> </web-app>
  • 36. Tomcat Web Application Manager Path: URL dellaWA Sessions: numero di sessioni dellaWA create Commands: sezione per la gesione dellaWA
  • 37. Tomcat Web Application Manager WAR file to deploy: sezione per lupload della WA
  • 38. Riferimenti ApacheTomcat, JavaBeans e JDBC 1. https://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_HowTo.html (Windows and Unix) 2. https://wolfpaulus.com/journal/mac/tomcat8/ (OS X) 3. https://www.mulesoft.com/tcat/tomcat-linux (Linux) 4. https://www.tutorialspoint.com/jsp/jsp_java_beans.htm (JavaBeans) 5. http://www.java-samples.com/showtutorial.php?tutorialid=552 (JavaBeans) 6. http://theopentutorials.com/tutorials/java/jdbc/jdbc-examples-introduction/ (JDBC example) 7. https://netbeans.org/kb/docs/ide/java-db.html (Java DB Derby) Contatti: davide.nardone@studenti.uniparthenope.it Laboratorio di Architettura e Sistemi IV piano lato NORD, stanza 432.