E-commerce dedicato alla vendita di prodotti per il poker, sviluppato come progetto d'esame per il corso Tecnologie Software per il Web (TSW) β a.a. 2025/2026.
| Layer | Tecnologia |
|---|---|
| Server-side | Java EE β Servlet, JSP, Filter |
| Application Server | Apache Tomcat 9 |
| Database | MySQL con DataSource JNDI (Connection Pool) |
| Driver DB | mysql-connector-j 9.7.0 |
| Front-end | HTML5, CSS3, JavaScript (ES6+) |
| Comunicazione asincrona | AJAX + Fetch API con JSON |
| Pattern architetturale | MVC (ModelβViewβController) |
| Sicurezza password | SHA-256 (cifratura one-way) |
| IDE | Eclipse (Dynamic Web Project) |
Controller β src/main/java/controller/ (Servlet + Filter)
Model β src/main/java/model/bean/ (Bean)
src/main/java/model/DAO/ (Data Access Object)
src/main/java/model/utils/ (Utility)
View β src/webapp/WEB-INF/views/ (JSP β non accessibili direttamente)
L'HTML Γ¨ generato esclusivamente dalle JSP. Le Servlet non producono mai output HTML diretto.
PokerShop/
βββ SQL/
β βββ pokerShopCreation.sql
β βββ pokerShopPopulation.sql
β
βββ src/
βββ main/java/
β βββ controller/
β β βββ AuthFilter.java β Filtro servlet (protegge /admin/*)
β β βββ LoginServlet.java β GET: mostra login / POST: autentica
β β βββ LogoutServlet.java β Invalida la sessione
β β βββ RegistrazioneServlet.java β GET: mostra form / POST: salva utente
β β βββ admin/
β β βββ AdminDashboardServlet.java
β β βββ AdminProdottiServlet.java β CRUD prodotti
β β βββ AdminUtentiServlet.java β Visualizza ed elimina utenti
β β βββ AdminOrdiniServlet.java β Ordini con filtri data/cliente
β β
β βββ model/
β βββ bean/
β β βββ BeanUtente.java
β β βββ BeanProdotto.java
β β βββ BeanCategoria.java
β β βββ BeanCarrello.java
β β βββ BeanProdottoCarrello.java
β β βββ BeanOrdine.java
β β βββ BeanProdottoOrdine.java
β β βββ BeanRecensione.java
β β βββ BeanFoto.java
β βββ DAO/
β β βββ DBConnect.java β Connessione via JNDI DataSource
β β βββ UtenteDAO.java
β β βββ ProdottoDAO.java
β β βββ CategoriaDAO.java
β β βββ CarrelloDAO.java
β β βββ OrdineDAO.java
β β βββ RecensioneDAO.java
β β βββ FotoDAO.java
β βββ utils/
β βββ PasswordUtils.java β Hash SHA-256 + verify
β
βββ webapp/
βββ index.jsp
βββ registrazione.jsp
βββ META-INF/
β βββ context.xml β Configurazione DataSource JNDI
βββ WEB-INF/
βββ web.xml
βββ lib/
β βββ mysql-connector-j-9.7.0.jar
βββ views/
βββ login.jsp
βββ admin/
βββ header.jsp β Fragment riutilizzabile (sidebar)
βββ footer.jsp β Fragment riutilizzabile
βββ dashboard.jsp
βββ prodotti.jsp
βββ prodotto-form.jsp
βββ utenti.jsp
βββ ordini.jsp
Il database pokerShop Γ¨ composto da 9 tabelle con vincoli di integritΓ referenziale:
| Tabella | Descrizione | Chiave |
|---|---|---|
utente |
Clienti e amministratori | email (PK) |
prodotto |
Catalogo con prezzo, IVA, quantitΓ , stato attivo | id (PK) |
categoria |
Categorie dei prodotti | id (PK) |
foto |
Immagini associate ai prodotti | nome (PK) |
carrello |
Carrello per utente | id (PK) |
prodottiCarrello |
Righe carrello con quantitΓ | (carrello, prodotto) |
ordine |
Ordini effettuati con totale e stato | id (PK) |
prodottiOrdine |
Righe ordine con prezzo e IVA storici | (ordine, prodotto) |
recensione |
Recensioni degli utenti sui prodotti | id (PK) |
IntegritΓ storica: prezzo e IVA sono salvati direttamente nella riga d'ordine (
prodottiOrdine), così le variazioni future del catalogo non alterano gli ordini passati.
- Registrazione con validazione campi (nome, cognome, email, password, indirizzo, CAP, cittΓ )
- Verifica in tempo reale disponibilitΓ email tramite AJAX
- Login e logout con gestione sessione (
HttpSession) - Cifratura password con SHA-256
- Navigazione catalogo prodotti con barra di ricerca AJAX e suggerimenti dinamici
- Gestione carrello (aggiunta, modifica quantitΓ , rimozione)
- Conferma ordine con svuotamento carrello
- Storico ordini del cliente
- Messaggi di conferma per tutte le azioni eseguite
- Accesso protetto tramite
AuthFilter+ controllo ruoloisAdmin - Dashboard con contatori in tempo reale (prodotti, utenti, ordini)
- CRUD Prodotti: inserimento, modifica, visualizzazione, cancellazione con richiesta di conferma
- Visualizzazione elenco utenti ed eliminazione
- Visualizzazione di tutti gli ordini
- Filtro ordini per intervallo di date (dal / al)
- Filtro ordini per cliente (select popolato dinamicamente)
PreparedStatementper tutte le query β prevenzione SQL Injection- Password cifrate SHA-256 nel database
AuthFiltersu/admin/*β pagine admin inaccessibili senza sessione admin- JSP protette in
WEB-INF/views/β non raggiungibili direttamente via URL - Pagine di errore personalizzate per codici 404, 500, 403
- Pattern MVC rispettato
- Fragment JSP (
header.jsp,footer.jsp) per componenti riutilizzabili - DataSource JNDI con Connection Pool configurato in
context.xml - Package separati:
controller,controller.admin,model.bean,model.DAO,model.utils - Validazione form lato client con espressioni regolari e JavaScript
- Messaggi di errore inline (nessun
alert()) - Sito completamente responsive con media query
source SQL/pokerShopCreation.sql
source SQL/pokerShopPopulation.sqlModifica src/webapp/META-INF/context.xml con le tue credenziali MySQL:
<Resource name="jdbc/pokerShop"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
username="root"
password="TUA_PASSWORD"
url="jdbc:mysql://localhost:3306/pokerShop"/>INSERT INTO utente (email, nome, cognome, _password, isAdmin, indirizzo, _ncivico, cap, citta)
VALUES (
'[email protected]', 'Admin', 'PokerShop',
'240be518fabd2724ddb6f04eeb1da5967448d7e831c08c8fa822809f74c720a9',
true, 'Via Roma', 1, '00100', 'Roma'
);L'hash corrisponde alla password admin123. Sostituiscilo con l'hash della tua password preferita.
- Importa come Dynamic Web Project
- Tasto destro β Run As β Run on Server β Tomcat 9
- Apri
http://localhost:8080/PokerShop
| URL | Accesso | Descrizione |
|---|---|---|
/ |
Pubblica | Home page |
/login |
Pubblica | Login utente |
/logout |
Autenticato | Logout |
/registrazione |
Pubblica | Registrazione nuovo utente |
/admin/dashboard |
Admin | Dashboard con statistiche |
/admin/prodotti |
Admin | CRUD prodotti |
/admin/utenti |
Admin | Gestione utenti |
/admin/ordini |
Admin | Ordini con filtri |
Errore 404: inserisci nell'url un path che non esiste Errore 403: Decommenta l'if nel file HomeServlet.java alla riga 33 Errore 500: Decommenta l'if nel file HomeServlet.java alla riga 39