PDA

View Full Version : Realizzare un forum in JSP


Toolsman
10-09-2006, 08:04
Salve, sarei intenzionato a realizzare un forum in JSP (Java Server Pages) e mi rivolgo alla comunity per qualche suggerimento nella corretta progettazione e sviluppo.

Come programmi uso:
- JDK SE 1.5 v.7
- NetBeans + JDK EE + TOMCAT 5.x.x
- Postgresql (interscambiabile con MySQL)

...sto analizzando la possibilità di passare a Eclipse.

Ovviamente accetto di tutto da suggerimenti o codice sorgente.


Grazie anticipatamente!

NB: Spero che questo forum possa essere di aiuto a tutti coloro che nella loro vita vogliano realizzare un "sito fai da te" con supporto a forum, chat, ecc..., con il supporto della tecnologia JAVA!

dierre
10-09-2006, 08:51
questa è una guida che può esserti utile.
http://www.webmasterpoint.org/jsp/home.asp

questo è un forum freeware realizzato con la Java J2EE technology
http://www.mvnforum.com/mvnforumweb/index.jsp

ally
10-09-2006, 09:24
...iniziativa interessante...ti consiglio di cercare informazioni sulla struttura MVC...e di utilizzare un framework come struts per facilitare tale approccio...

...ciao...

dierre
10-09-2006, 09:47
tra l'altro mi sembra che struts si basi su mvc

kalebbo
10-09-2006, 10:50
tra l'altro mi sembra che struts si basi su mvc

Già, bravo dierre :D

dierre
10-09-2006, 11:17
Già, bravo dierre :D

Kaleb finiscila, so dove abiti :D

Toolsman
10-09-2006, 11:23
...grazie ragazzi. Sto verificando le soluzioni proposte..., nel frattempo continuate a scrivere

ally
10-09-2006, 11:55
...ti consiglierei inoltre come ambiente di sviluppo eclipse abbinato al plug in exadel studio...molto comodo per applicativi con struts...

...purtroppo non ho tantissimo tempo...ma se serve una mano a impostare l'ambiente,settare i vari file di cofigurazione,creare lo strato di action base,persistents etc...chiedi pure...era da tempo che passava per la testa l'idea di raccogliere le...poche...conoscenze acquisite con questi elementi per scrivere una guida per chiunque si voglia cimentare a queste tecnologie...

...ciao...

kalebbo
10-09-2006, 12:00
...ti consiglierei inoltre come ambiente di sviluppo eclipse abbinato al plug in exadel studio...molto comodo per applicativi con struts...

...purtroppo non ho tantissimo tempo...ma se serve una mano a impostare l'ambiente,settare i vari file di cofigurazione,creare lo strato di action base,persistents etc...chiedi pure...era da tempo che passava per la testa l'idea di raccogliere le...poche...conoscenze acquisite con questi elementi per scrivere una guida per chiunque si voglia cimentare a queste tecnologie...

...ciao...

Che tu sappia c'è un qualcosa di simile ad exadel studio che sia compatibile con OS X? Io usavo easy struts, ma se c'è qualcosa di meglio...

ally
10-09-2006, 12:02
Che tu sappia c'è un qualcosa di simile ad exadel studio che sia compatibile con OS X? Io usavo easy struts, ma se c'è qualcosa di meglio...

...exadel è un plugin per eclipse...e per quel che ne so...eclipse è disponibile anche in versione mac...non dovrebbero esserci problemi quindi per utilizzare i plugin...

...ciao...

kalebbo
10-09-2006, 12:11
...exadel è un plugin per eclipse...e per quel che ne so...eclipse è disponibile anche in versione mac...non dovrebbero esserci problemi quindi per utilizzare i plugin...

...ciao...

No, purtroppo per vari plugin ci sono problemi di compatibilità.
Sono andato sul sito di exadel studio e ho visto installer per linux e windows, ma non per OS X. Per questo ti avevo fatto quella domanda.

ally
10-09-2006, 12:14
No, purtroppo per vari plugin ci sono problemi di compatibilità.
Sono andato sul sito di exadel studio e ho visto installer per linux e windows, ma non per OS X. Per questo ti avevo fatto quella domanda.

...purtroppo per quanto riguarda struts ho lavorato solamente con exadel e myeclipse entrambi plugin di eclipse...il secondo inoltre è a pagamento...

...mi dispiace ciao...

ally
10-09-2006, 12:15
...purtroppo per quanto riguarda struts ho lavorato solamente con exadel e myeclipse entrambi plugin di eclipse...il secondo inoltre è a pagamento...

...mi dispiace ciao...

...ho fatto una piccola ricerca (http://www.myeclipseide.com/displayarticle9.html) ed il secondo risulta compatibile con mac...

kalebbo
10-09-2006, 12:18
...ho fatto una piccola ricerca (http://www.myeclipseide.com/displayarticle9.html) ed il secondo risulta compatibile con mac...

Grazie mille per la disponibilità :)
Dò subito un'occhiata a questo myeclipse.

Toolsman
10-09-2006, 14:13
...ti consiglierei inoltre come ambiente di sviluppo eclipse abbinato al plug in exadel studio...molto comodo per applicativi con struts...

...purtroppo non ho tantissimo tempo...ma se serve una mano a impostare l'ambiente,settare i vari file di cofigurazione,creare lo strato di action base,persistents etc...chiedi pure...era da tempo che passava per la testa l'idea di raccogliere le...poche...conoscenze acquisite con questi elementi per scrivere una guida per chiunque si voglia cimentare a queste tecnologie...

...ciao...

Ti ringrazio davvero. Da domani procedo a mettere mano su Eclipse (...l'ho scaricato in 2gg con una 56Kb )e compararlo con Netbeans. Al momento devo operare sulle tabelle del database su cui pushare e poppare i dati di volta in volta, se avete consigli in materia.... Campi, definizioni, vincoli....

Inoltre non ho mai avuto a che fare con struts (...ma ho visto che NetBeans ne consente l'uso) e solo nei prossimi giorni potrò analizzare a fondo l'ambiete mvc (di cui ho letto qualche lucido): vi sarei grato se potreste darmi qualche vostro dettaglio in materia.

Di fatto questo "progetto forum" è parte di un sistema più grande, cioè di un "sito interattivo" che prevede l'uso di JSP, SERVLET... in questo contesto dove si collocano gli STRUTS? GRAZIE

ally
10-09-2006, 16:00
Ti ringrazio davvero. Da domani procedo a mettere mano su Eclipse (...l'ho scaricato in 2gg con una 56Kb )e compararlo con Netbeans. Al momento devo operare sulle tabelle del database su cui pushare e poppare i dati di volta in volta, se avete consigli in materia.... Campi, definizioni, vincoli....

Inoltre non ho mai avuto a che fare con struts (...ma ho visto che NetBeans ne consente l'uso) e solo nei prossimi giorni potrò analizzare a fondo l'ambiete mvc (di cui ho letto qualche lucido): vi sarei grato se potreste darmi qualche vostro dettaglio in materia.

Di fatto questo "progetto forum" è parte di un sistema più grande, cioè di un "sito interattivo" che prevede l'uso di JSP, SERVLET... in questo contesto dove si collocano gli STRUTS? GRAZIE

...struts permette di gestire in maniera semplice le varie azioni da eseguire a seconda delle request fatte dagli utenti o degli eventi generati...esempio banale...un utente cerca di accedere ad una pagina senza averne l'autorizzazione...è possibile impostare un forward globale ad una pagina di errore o di login ogni qualvolta questa situazione avvenga...la struttra prevede un file di configurazione in cui specificare le diverse pagine,le calssi action che svolgono l'elaborazione per queste pagine e le relative classi contenitore per gestire i campi form come normali classi di bean...

...ecco come puo' apparire una classe di gestione del login...



public class LoginAction extends BaseAction {

//imposto i due possibili forward
private final String FORWARD_NO_LOGIN = "nologin";
private final String FORWARD_LOGIN = "login";

//metodo lanciato all'inserimento del form di login
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
super.execute(mapping, form, request, response);
//piccolo giochino per salvare nel log il tempo di esecuzione
long startMilliseconds = System.currentTimeMillis();
//imposto la variabile di forward ad un forward errato,se venissero generati degli errori il forward è già impostato ;)
String returnForward = "wrongForward";
//inizializzo gli action message
ActionMessages messages = new ActionMessages();
//inizializzo lo strato di business che si connettreà al db
UtenteBusiness utenteBusiness = new UtenteBusiness();
//alimento il form
LoginForm login = (LoginForm)form;
try {
//tramite un campo hidden nella pagina ho valorizzato una variabile per capire che richiesta è stata fatta dalla pagina di login
if("login".equalsIgnoreCase(login.getOperazione()))
{
//alimento l'oggetto UtenteInfo in base a cio' che il db restituisce
UtenteInfo userInfo = utenteBusiness.login(login.getSurname(),login.getPassword());
//oggetto valorizzato,salvo in sessione l'oggetto in modo da poterlo richiamare in caso di altre autenticazioni e imposto il corretto forward
if(userInfo!=null)
{
request.getSession().setAttribute("userInfo",userInfo);
returnForward=FORWARD_LOGIN;
}
else
//oggetto nullo,metto in sessione il messaggio di errore(in questo caso richiamato da un file di resources) e imposto il forward
{
messages.add("",new ActionMessage("label.error.nouserlogged"));
returnForward=FORWARD_NO_LOGIN;
}
}
}catch(Exception e) {
exceptionManager(request, e);
System.out.println(e);
throw e;
}
saveMessages(request, messages);
return (mapping.findForward(returnForward));
}

}



...molta carne al fuoco in questo piccolo esempio...come vedi la logica in questa action è minima...la gestione dello strato persistente è affidata alla classe UtenteBusiness...gli errori sono semplicemente messi in sessione come messaggi...spetterà alla pagina richiesta dal forward wrongForward gestirli...certo l'argomento non è banale...la classe LoginAction estende una classe ActionBase non riportata che si preoccupa di fornire alla classe tutti gli oggetti necessari per lo svolgimento delle request...manca la classe LoginForm...che pero' è molto simile ad un normale contenitore java fatta eccezione per alcuni metodi implementati o implementabili quali l'autenticazione o il reset del form...le classi di gestione degli errori,dello strato persistente,e delle eventuali utility per l'internazionalizzazione e i resource per i messaggi...

...ciao...

...

dierre
10-09-2006, 16:12
giusto una domanda...ovviamente progettare in questo ha molti vantaggi, ma a livello di "velocità" ed "efficienza" i tempi di risposta come sono rispetto ad un progetto costruito da zero? Cioè mi spiego meglio, ovviamente dipende da come uno progetta la cosa, però credo che in generale un framework per jsp rallenti un pò il tutto, vero?

ally
10-09-2006, 16:20
giusto una domanda...ovviamente progettare in questo ha molti vantaggi, ma a livello di "velocità" ed "efficienza" i tempi di risposta come sono rispetto ad un progetto costruito da zero? Cioè mi spiego meglio, ovviamente dipende da come uno progetta la cosa, però credo che in generale un framework per jsp rallenti un pò il tutto, vero?


...non penso ci siano problemi di velocità...anzi...un framework permette di rendere il codice piu' snello evitando ridondanze...

...ciao....

Toolsman
10-09-2006, 21:11
Beh, per chi non ci ha mai messo le mani, ma maneggia java la missione non è impossibile, ma degna di meditazione.
Un pò alla volte ne verremo fuori...si spera!

kalebbo
11-09-2006, 01:31
giusto una domanda...ovviamente progettare in questo ha molti vantaggi, ma a livello di "velocità" ed "efficienza" i tempi di risposta come sono rispetto ad un progetto costruito da zero? Cioè mi spiego meglio, ovviamente dipende da come uno progetta la cosa, però credo che in generale un framework per jsp rallenti un pò il tutto, vero?

Beh Dierre, mettila così: o il controller delle action utente te lo fai a manina, rischiando di perderci la vita dietro, oppure lo implementi con un framework(esistono per questo :D ), ad esempio Struts.
Il controller va fatto, non si scappa.
La scelta è tutta qui.

thebol
11-09-2006, 06:56
fra l'altro nella costruzione di web-app di questo tipo, l'efficienza viene data piu dall'accesso al db, che da un ulteriore strato di software (che fa qualche comparazione fra stringhe ).

dupa
11-09-2006, 08:25
ma si trovano poi hosting con J2EE a buon prezzo?

Toolsman
13-09-2006, 07:43
...salve gente. Chiarimenti sul modello MVC:
Esempio:
1) l'utente da browser richiede la pagina www.dominio.it/login.html
2)l'utente inserisce i dati nel form che gli viene visualizzato e che sul server è gestito da nuovaRegistrazione.java (SERVLET)
3) l'utente clicca il bottone invia e i dati vengono catturati dal gestore
4) la SERVLET crea un JAVABEAN che modellizza i dati del nuovo utente e lo passa ad una classe di mie utility che ricorrendo all'API JAVA carica i dati del nuovo utente sul database.
5) la SERVLET accertatasi del buon fine dell'operazione dispaccia il controllo ad una pagina JSP il cui scopo e creare e spedire la risposta al CLIENT

...si può fare? In pratica nel modello MVC le pagine JSP vengono usate per l'output al BROWSER sulla base del lavoraccio di elaborazione dati delle SERVLET (che quindi fornisce alla stessa JSP il "pacco da consegnare") ?

...attendo vostre opinioni in merito

thebol
13-09-2006, 08:28
...salve gente. Chiarimenti sul modello MVC:
Esempio:
1) l'utente da browser richiede la pagina www.dominio.it/login.html
2)l'utente inserisce i dati nel form che gli viene visualizzato e che sul server è gestito da nuovaRegistrazione.java (SERVLET)
3) l'utente clicca il bottone invia e i dati vengono catturati dal gestore
4) la SERVLET crea un JAVABEAN che modellizza i dati del nuovo utente e lo passa ad una classe di mie utility che ricorrendo all'API JAVA carica i dati del nuovo utente sul database.
5) la SERVLET accertatasi del buon fine dell'operazione dispaccia il controllo ad una pagina JSP il cui scopo e creare e spedire la risposta al CLIENT

...si può fare? In pratica nel modello MVC le pagine JSP vengono usate per l'output al BROWSER sulla base del lavoraccio di elaborazione dati delle SERVLET (che quindi fornisce alla stessa JSP il "pacco da consegnare") ?

...attendo vostre opinioni in merito


+ o -
io pero non farei fare il lavoraccio alle servlet, ma a un business model indipendente dal fatto che lavori su web. In teoria le servlet le potresti riutilizzare anche per un applicazione client o RCP, ma alla fine penso non venga mai fatto. Le servlet le userei piu come controller che come model(chiamamo i metodi del business model e a seconda di cosa viene ritornato predispongono i dati da mandare alle jsp e a quale jsp andare)

ally
13-09-2006, 08:29
...si grosso modo funziona così...ma il dispatcher è gestito in automatico da Struts...devi solo preoccuparti di scrivere la jsp di login e la relativa classe action che gestisca le possibili operazioni richieste da tale pagina...in caso di errori o simili lo stesso dispatcher reindirizzera la risposta ad una pagina designata alla getione di tale evento...

...ciao...

Toolsman
13-09-2006, 08:49
Esempio:
1) l'utente da browser richiede la pagina www.dominio.it/login.html
2)l'utente inserisce i dati nel form che gli viene visualizzato e che sul server è gestito da nuovaRegistrazione.java (SERVLET)
3) l'utente clicca il bottone invia e i dati vengono catturati dal gestore
4) la SERVLET o chi per essa (altre classi create da noi) crea un JAVABEAN che modellizza i dati del nuovo utente e lo passa ad una classe di mie utility (per svolgere l'operazione voluta dall'utente come l'inserimento nel database = registrazione) che ricorrendo all'API JAVA carica i dati del nuovo utente sul database.
5) la SERVLET accertatasi del buon fine dell'operazione dispaccia il controllo ad una pagina JSP il cui scopo e creare e spedire la risposta al CLIENT

In pratica nel caso del forum:
1 Classe di Servlet orchestra e dirige i lavori (CONTROLLA) magari richiamando anche delle classi che controllano la correttezza dei dati inseriti nel fom
1 Classe modellizza i post (JAVABEANS)
1 Classe modellizza le operazioni su di essi (INSERIMENTO...)
- 1 Classe DBMS realizza per nostro conto le richieste SQL sul database
1 Pagina JSP è richiamata alla fine dei lavori dalla SERVLET per mostrare all'utente il risultato (...la pagine che contiente n post + il suo :) )

Ora, quello che mi domando è: ...ma secondo il modello MVC la pagina jsp è da usarsi solo in risposta?
Mi spiego meglio
es:
l'utente accede a login.html dove c'è il form gestito dalla SERVET sul SERVER nuovaRegistrazione.java che scatena il processo descritto e alla fine la risposta arriva da registrazioneAvvenuta.JSP

oppure

l'utente accede a login.jsp ? E poi?




...attendo vostre opinioni in merito

ally
13-09-2006, 09:29
...le pagine jsp saranno usate per entrambi gli scopi...una pagina di risposta è infatti a sua volta pagina di scelta per ulteriori operazioni...dalla pagina di login arriverai ad una pagina main del forum o del sito che ovviamente deve permettere di accedere alle altre risorse...

...ciao...

Toolsman
15-09-2006, 13:55
Realizzo la pagina index.html del sito web dove alcuni bottoni puntano a delle aree:

es: bottone per accesso "area registrazione nuovo utente"
href = percorso/Controller.java?operazione=registrazione

Controller.java è una servlet di controllo che verificato il valore di operazione smista la richiesta alla pagina jsp che è ingrado di esaudirla.
Nel nostro caso, la servlet Controller.java giacchè l'utente desidera registrarsi, passerà il controllo alla pagina jsp nuovaRegistrazione.jsp che presenterà all'utente il form da compilare ed eventuali immagini a corredo che verranno caricate in modo random....

Beh, che dite, a questo punto l'implementazione del modello mvc servlet centric è realizzato correttamente?

Riepilogo:
index.html --> clicco su bottone registrazione --> scateno la servlet supervisore --> scatena la pagina jsp corretta !

ally
15-09-2006, 19:56
...si...la strada è questa...

...ciao...

Toolsman
16-09-2006, 07:44
Dal 25 settembre si inizia l'implentazione del sito. Per ora è stata delineata a grandi linee la base di dati concettualmente, logicamente e fisicamente.
Ovviamente va raffinata e espansa....

Comunque ringrazio già voi tutti per le risposte e in particolare ally (...sei autodidatta o hai seguito indirizzi di studi particolarmente formativi?)

Se avete suggerimenti e idee: sono qui!

dierre
16-09-2006, 12:39
Ho trovato questa robina qui, vedi se ti può interessare sisi

http://courses.coreservlets.com/Course-Materials/struts.html

Toolsman
30-09-2006, 09:19
Ei, stiamo limando il database e giacchè volevamo avere traccia delle preferenze che l'utente registrato vuole di "persone con i suoi stessi gusti", cosìcchè all'accesso al sistema sa con chi ha qualcosa in comune, ci domandavamo se era cosa buona giusta salvare in una tabella profiler i la user_id e campi di preferenze per ciascun utente...?

Secondo voi è possibile raggiungere lo stesso obiettivo operando con cookie o sessioni, spostando di livello le informazioni di preferenze?

Dimenticavo, in fase di registrazione al sito all'utente verrà mostrata una pagina con un form da compilare per tenere conto delle preferenze cercate nelle altre persone della comunity...per questo ho pensato subito di sparare i dati in una tabella sul database... :)