Milestone 3 - StefanoRUsai/ProgettoAMM-NerdBook GitHub Wiki

Milestone 3: Programmazione Server Side

Per il progetto si implementerà un piccolo social network semplificato, che permetta agli utenti di stringere amicizie e di creare e gestire dei gruppi. Si avranno due tipologie di utenti: Utenti registrati, che possono inserire informazioni personali, stringere amicizia con altri utenti, creare e gestire dei gruppi, inserire post nella sua bacheca o quella degli amici. L’amministratore, che può cancellare i post da qualsiasi bacheca e cancellare qualsiasi gruppo. Maggiori informazioni si possono trovare nella pagina di descrizione del progetto 2017.

Per questa milestone dovete creare una parte della logica server side del per il vostro sito web. Regole: Sono sempre valide le regole delle milestones precedenti. Validate il codice HTML ed usate un CSS per tutte le pagine. Potete modificare l’HTML ed i CSS delle pagine della milestone precedente. Prima di farlo però chiedetevi se sia strettamente necessario e, soprattutto, attenzione a non introdurre errori.

Task 1

Se il vostro progetto Netbeans non fosse un progetto Java-Web, createne uno nuovo nel repository che utilizzate per la consegna.

Task 2

Create un package dedicato a contenere il modello della vostra applicazione. All’interno di questo package ci deve essere una classe per ogni oggetto del dominio applicativo manipolato dalla vostra applicazione. In particolare: Utenti registrati Post Gruppi

Inserite all’interno di queste classi tutte le variabili necessarie per descriverli. Fatto questo, create per ognuna una Factory che restituisca istanze della classe popolata con dati fittizi, restituendole in base ad un determinato criterio.

Per esempio (vuol dire che non siete costretti ad implementare l’elenco di sotto ma qualcosa di simile), consideriamo la classe Post (il nome non è importante, chiamatela come volete) che rappresenta un oggetto in vendita. La corrispondente factory PostFactory può avere i seguenti metodi: Post getPostById(int id) che restiuisce l’oggetto avente l’identificatore passato per parametro List getPostList(User usr) che restituisce tutti gli oggetti Post per un determinato utente List getPostList(Group gr) che restituisce tutti gli oggetti Post per un determinato gruppo E tutti gli altri metodi necessari per fare la ricerca di dati nell’applicazione.

Task 3

Trasformate le pagine HTML delle milestones precedenti in JSP, effettuando le seguenti operazioni: Individuate i pezzi ripetuti di HTML ed isolateli in altre JSP, importandoli all’interno delle altre con le include (p.es. Header, footer, barre di navigazione ecc.) Rendete dinamiche le parti HTML da generare in base ai dati dell’applicazione, come per esempio l’elenco dei post in bacheca. Per fare questo, assumete che nella request siano stati impostati tutti gli attributi necessari (p.e. la lista dei post da scorrere) dalla servlet che richiama la JSP. Impostate la pagina di descrizione come welcome file della vostra applicazione web

#Task 4

Create una servlet Login e mappatela sulla URL login.html. La servlet si deve comportare ne modo seguente: Nel caso l’utente non sia autenticato, deve mostrare il form di login (login.jsp) e verificare username e password nel caso siano inviate tramite il form Nel caso l’utente sia già stato autenticato (durante la gestione della richiesta corrente o ad una precedente), deve mostrare La pagina di modifica dei dati del profilo nel caso l’utente non abbia registrato uno fra i seguenti dati: nome, cognome, immagine del profilo, frase di presentazione. La bacheca con i post dell’utente nel caso tutti i dati precedenti siano stati registrati. Nel caso l’utente abbia inviato username e password ma l’autenticazione sia fallita, deve mostrare un messaggio di errore e permettere di riprovare. Suggerimento: nelle factory create, fra gli altri utenti, un utente incompleto, il cui campo nome, cognome, immagine del profilo o frase di presentazione sia a null. Per tutti gli altri, impostate invece tutti i campi. Nel caso incompleto effettui la login, deve vedere la pagina del profilo subito dopo l’autenticazione. Gli altri devono vedere la bacheca.

#Task 5

Create una servlet Profilo e mappatela sulla URL profilo.html. La servlet si deve comportare nel modo seguente: Nel caso l’utente non sia autenticato, deve mostrare un messaggio di accesso negato Nel caso l’utente sia autenticato, deve mostrare il form di inserimento dei dati del profilo. Nel caso siano inviati i dati relativi al profilo, deve mostrare una conferma dell’avvenuto inserimento ed i dati inseriti. N.B. In realtà nel caso si faccia il reload della pagina, i dati torneranno ad essere quelli che erano prima dell’inserimento. Ciò che scrivete nel form sarà disponibile solo per la riposta immediatamente dopo il submit del form. È un problema che risolveremo nella prossima milestone.

#Task 6

Create una servlet Bacheca e mappatela sulla URL bacheca.html. È possibile per gli utenti autenticati visitare la bacheca di altri utenti. La servlet si deve comportare nel modo seguente: Nel caso l’utente non sia autenticato, deve mostrare un messaggio di accesso negato Nel caso l’utente sia autenticato, deve mostrare l’elenco dei post di uno specifico utente. Sulla sinistra della pagina, ci deve essere un elenco di link alle bacheche degli utenti presenti nel sistema. Cliccando su uno di questi link, si visita la bacheca dell’utente selezionato. In cima alla parte centrale della pagina, ci deve essere un form per l’inserimento di un nuovo post. È possibile per un utente scrivere nella bacheca di altri utenti. Una volta inserito il messaggio, la servlet mostrerà il riepilogo dei dati inseriti, mostrando esplicitamente chi sia l’autore del post e chi sia il proprietario della bacheca. Il riepilogo deve mostrare un pulsante di conferma che conclude l’inserimento. Premuto questo pulsante, deve comparire il messaggio “Hai scritto sulla bacheca di [Tizio]”.

Suggerimenti: Fate attenzione all’utilizzo della sessione. Deve essere possibile aprire la bacheca di più utenti su più tab.

N.B. Il post alla fine non comparirà nella bacheca del proprietario. È un problema che risolveremo nella prossima milestone.

#Task 7 Eseguite il commit finale su Git Hub per la consegna, utilizzando come messaggio “consegna M3”

⚠️ **GitHub.com Fallback** ⚠️