Skip to content
C-JeanDevPublic

About

πŸƒ E-commerce per prodotti da poker sviluppato in Java EE con pattern MVC e DAO. Autenticazione con password cifrate SHA-256, pannello admin completo (CRUD prodotti, filtri ordini), carrello, storico ordini, barra di ricerca con suggerimenti AJAX e verifica email asincrona in registrazione. Stack: Servlet, JSP, MySQL, Tomcat 9.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

β™  PokerShop

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.


Stack Tecnologico

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)

Architettura MVC

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.


Struttura del Progetto

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

Schema Database

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.


FunzionalitΓ 

Area Cliente

  • 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

Area Amministratore

  • Accesso protetto tramite AuthFilter + controllo ruolo isAdmin
  • 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)

Sicurezza

  • PreparedStatement per tutte le query β†’ prevenzione SQL Injection
  • Password cifrate SHA-256 nel database
  • AuthFilter su /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 e Architettura

  • 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

Configurazione e Avvio

1. Database

source SQL/pokerShopCreation.sql
source SQL/pokerShopPopulation.sql

2. DataSource JNDI

Modifica 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"/>

3. Crea il primo admin

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.

4. Avvio in Eclipse

  1. Importa come Dynamic Web Project
  2. Tasto destro β†’ Run As β†’ Run on Server β†’ Tomcat 9
  3. Apri http://localhost:8080/PokerShop

URL Principali

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

Verifica funzionamento pagine di errore

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

About

πŸƒ E-commerce per prodotti da poker sviluppato in Java EE con pattern MVC e DAO. Autenticazione con password cifrate SHA-256, pannello admin completo (CRUD prodotti, filtri ordini), carrello, storico ordini, barra di ricerca con suggerimenti AJAX e verifica email asincrona in registrazione. Stack: Servlet, JSP, MySQL, Tomcat 9.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages