PDA

View Full Version : [JSP] occorrente per una applicazione web


nazkul
07-08-2007, 12:09
Ciao a tutti, devo realizzare un'applicazione web, siccome non so da che parte cominciare ho seguite varie guide su internet per capire che cosa devo creare. Il problema è che ogni esempio, che posso pure scaricare completo senza doverlo creare da me e quindi rischiare di commettere un errore, non funziona.
A questo punto mi sorge il dubbio che non ho installato tutto l'occorrente.
Io avevo SDK standard edition, poi avevo installato Tomcat 6 come application server e infine, anche se ancora non utilizzato visto che trovo i file .war giò pronti, avevo Eclipse Europa che mi risulta abbia già i Tools per le applicazioni web.
Nessun esempio funzionava, per cui mi è venuto il dubbio che servisse SDK Enterprise edition, ma una volta installato e ripetuta l'installazione di Tomcat e Eclipse, questi ultimi non mi hanno chiesto nulla nel settaggio in riferimento a SDK Enterprise e mi ritrovo allo stesso problema di prima, cioè gli esempi a mia disposizione non funzionano.
Se qualcuno mi sa dare una mano mi farebbe un grosso piacere, grazie
:)

PGI-Bis
07-08-2007, 13:47
Forse gli esempi usano una base dati che sul tuo sistema non c'è. Lo dico perchè riuscire a fare una pagina JSP o una servlet che NON funziona significa veramente avere doti eccezionali.

Oppure gli esempi che hai scaricato sono applicazioni "enterprise" e non web. Cioè richiedono un server per applicazioni J2EE (tipo JSAS di Sun).

Basta aprire il war e leggere il descrittore di dispiegamento: lì vedi subito se il programma usa solo servlet, jsp e database o se richiede anche i fagioli d'impresa.

nazkul
07-08-2007, 14:01
Ciao :)
Purtroppo l'applicazione è semplicissima, e metto anche il link così magari potrebbe servire a qualcuno che è agli inizi come me:

http://www.javaportal.it/libro_j2ee/war.htm#download

Si tratta di una pagina html, dove si inseriscono 2 numeri e l'applicazione restituisce il prodotto tra questi 2 numeri.
Serve un file html, una servlet, una jsp e un JavaBean; la guida tra l'altro spiega con cura come strutturare le directory in modo da essere un progettino adatto alle regole dei .war, poi si crea il .war e va lanciato.
Ho creato il mio .war da me, e ho anche provato a scaricare quello già pronto, che si trova sempre nella pagina che ho messo sopra.
Apro

http://localhost:8080/manager/html

dal browser e faccio il deploy del file .war; per sicurezza riavvio Tomcat, la mia applicazione si nota sin dall'inizio che ha qualcosa di strano perché ho letto in vari siti che dovrebbe essere avviata da tomcat stesso, cioè dovrebbe essere già stato fatto "start".
Invece è su stop e se provo a fare start mi compare questo messaggio nello spazio dedicato ai message di Tomcat:

FAIL - Application at context path /moltiplicazione could not be started

Un'altra semplice applicazione web è stata data dal docente del corso che seguo, anche quella molto semplice, è già su start ma se clicco sul link che mette Tomcat per farla partire, mi viene dato errore 404 Http e dice:

description: The requested resource (/NomeDellaRisorsa/) is not available

Non funzionano e non so veramente dove sbattere la testa, pensando soprattutto che devo realizzarne una che avrà bisogno di accedere a dati ecc.. :(

PGI-Bis
07-08-2007, 15:19
Lancia tomcat da linea di comando. Nella cartella "bin" c'è un bat o un sh. La vedi se l'applicazione è dispiegata correttamente. Oppure consulta i file di log (cartella logs/).

Intantio io provo a caricare l'applicazione e poi ti dico.

PGI-Bis
07-08-2007, 15:43
Il descrittore di dispiegamento è errato. Cambialo in:

<?xml version="1.0"?>
<web-app>
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>mvc.Servlet</servlet-class>
</servlet>

<servlet>
<servlet-name>ServletResults</servlet-name>
<jsp-file>/ServletResults.jsp</jsp-file>
</servlet>

<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/Servlet</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>ServletInput.html</welcome-file>
</welcome-file-list>
</web-app>

Come dev'essere fatto questo web.xml lo trovi nelle specifiche servlet

http://jcp.org/aboutJava/communityprocess/final/jsr154/index.html

nazkul
07-08-2007, 17:27
Ciao, si adesso funziona, grazie mille :)

Tornando quindi alla domanda con cui ho aperto la discussione:
per fare una web application dovrò usare SDK EE oppure mi basta SE?
Non capisco perché al corso mi hanno fornito il link al Tutorial J2EE ( che tra l'altro non capisco cosa abbia in più rispetto a SE visto che il tutorial parla molto di XML e JSF ), quando fin'ora ha funzionato usando J2SE, perché al momento dell'installazione di Tomcat tra le poche cosa che chiede c'è dove si trovano i bin di J2SE se erro, comunque nulla di relativo a J2EE.

Il secondo esempio a cui facevo riferimento è strutturato in modo differente:
ha delle librerie a cui fa riferimento, dovrebbe essere un po come se si realizzasse un programma in java che fa le 4 operazioni fondamentali, poi le uso per fare un'applicazione web dove un utente fa i calcoli tramite browser.
Ho visto che sono in un .jar. Però non trovo nulla di .jsp o .html, sia nel .war che nel .jar a lui interno, insomma nulla di relativo alla "vista" in pratica. Ma è possibile che sia delegato tutto ai file java?

Io ti ringrazio ancora, sei stato molto gentile nel problema del web.xml :)

PGI-Bis
07-08-2007, 17:49
Quel che ti serve per sviluppare web-application è:

1. Un Java SDK, fu JDK.
2. Tomcat.

Il JDK ti serve per compilare le servlet, i javabean... per creare le classi java.

Se guardi, nella cartella "lib" di tomcat c'è un jar, servlet.jar. Quel Jar contiene una versione concreta delle specifiche servlet che, a loro volta, determinano il come/quando/dove di una web-application j2ee.

Se escludiamo la scrittura fisica di una servlet, tutto il resto dell'applicazione web è convenzionale, nel senso che si tratta di scrivere le cose giuste al posto giusto senza un procedimento di "compilazione" separato dal dispiegamento dell'applicazione.

La risposta alla domanda "è possibile che sia delegato tutto alle classi Java" è "sì col trucco".

Che non è po' 'sto gran trucco.

E' possibile che un'applicazione web non abbia pagine html perchè una servlet può creare pagine html e tramite l'associazione tra un nome ed una servlet, che realizzi nel descrittore di dispiegamento, puoi far sì che, ad esempio, l'indirizzo "bimbumbam/ciccio" corrisponda non ad una pagina statica ma al prodotto di una servlet (cioè alla pagina che la servlet crea al volo tramite i suoi metodi di servizio).

Le pagine JSP sono un altro modo di fare servlet, quindi diciamo che puoi benissimo risolvere tutto il programma a colpi di servlet.

Le Servlet sono classi Java, sono file ".class", le specifiche servlet stabiliscono che le classi Java usate da un'applicazione web possono essere impacchettate in un jar (che andrà posizionato in WEB-INF/lib), ergo è possibile che non ci siano nè file jsp, nè file html e neppure classi in WEB-INF/classes ma solo un jar in WEB-INF/lib.

Se esamini il descrittore di dispiegamento dell'applicazione web (i file web.xml) scoprirai quali sono i componenti dell'applicazione. Con ogni probabilità troverai solo servlet e un po' di "mapping" (cioè associazioni tra indirizzi relativi e nomi di servlet, che realizzano l'effetto "io scrivo l'indirizzo x e risponde la servlet y").

nazkul
07-08-2007, 19:25
Purtroppo dopo la tua completa spiegazione ho i miei dubbi che il file web.xml sia fatto come si deve.
Infatti io non trovo solo servlet e mapping come in maniera chiara mi spiegavi tu nel tuo ultimo messaggio, ma c'è anche questa parte qui:


<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>


Se non ho capito male la tua spiegazione, a questo punto mi sorge il dubbio che l'esempio fornitomi non è corretto, anche se mi sembra molto strano.
Però d'altra parte penso che a questo punto si capisca anche il perché quando cliko sul link dell'applicazione nel manager di Tomcat, mi compare la pagina con errore 404 dell'Http e mi dice che in pratica non è stato trovato ciò che è chiesto.
Grazie mille, :)

PGI-Bis
07-08-2007, 21:16
Le specifiche dicono che il contenuto del nodo:

welcome-file

è un URI parziale.

Un URI è tipo un URL ma più generico ancora (un URL è un URI). Molto tecnica come spiegazione :D.

Comunque, il tuo ragionamento non è sbagliato. Se welcome-file contiene

index.html

"normalmente" uno si aspetta di trovare un file index.html all'interno del war.

Questo non è strettamente necessario. L'URI del welcome-file può essere anche il "mapping" di una servlet.

Cioè se io avessi una servlet pippo:

<servlet>
<servlet-name>Pippo</servlet-name>
<servlet-class>cin.cin.Pippo</servlet-class>
</servlet>

Potrei creare un indirizzo "alias" (l'utente digita x e Tomcat gli rifila la servlet):

<servlet-mapping>
<servlet-name>Pippo</servlet-name>
<url-pattern>/index.html</url-pattern>
</servlet-mapping>

Qui che succede? Succede che il nome relativo (allo URL dell'applicazione web) "/index.html" causa l'invocazione del servizio offerto dalla servlet Pippo.

A questo punto se io dicessi:

<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

con poca magia otterrei un "index.html" che Tomcat associa alla servlet Pippo.

E' questo il tuo caso? Be', per scoprilo basta leggere i nodi servlet-mapping. Se scopri che gli URI contenuti nei welcome-file sono tutti "alias" delle servlet, allora l'applicazione web non necessita dei file index.html eccetera: sono tutte associazioni che rinviano a delle servlet.

Se i "mapping" non definiscono gli alias index.html, index.jsp eccetera, allora il tuo dubbio diventa certezza: quei file dovrebbero esserci ma non ci sono.

La seconda è molto più probabile della prima.

nazkul
07-08-2007, 21:46
Ho dato un'occhiata al mapping, in effetti roba sugli alias c'è, però è un po differente, in quanto fa così:


<servlet-mapping>
<servlet-name>
WebApp
</servlet-name>
<url-pattern>
/UnaClasseDellaLibreria
</url-pattern>
</servlet-mapping>


pare che venga fatto un alias per un file che ho trovato dentro il .jar che si trova nella cartella lib, file che ha estensione .class.
Cosa molto casinosa ma che temo sia proprio una specie di quello che dovrò realizzare io se, per tornare all'esempio dei primi messaggi, dovessi creare una applicazione che offre librerie per esempio per fare dei calcoli con l'input inserito dall'utente.
Ciao

PGI-Bis
07-08-2007, 23:47
Quel pezzo lì ti dice che nel contesto dell'applicazione web l'indirizzo

/UnaClasseDellaLibreria

chiama in causa la servlet di "nome" WebApp.

Il nome della classe Java che definisce la servlet WebApp la trovi in un nodo

<servlet>...</servlet>

Leggendo il descrittore dovresti vedere che c'è un nodo "servlet" con un figlio "servlet-name" che vale WebApp. Quello stesso nodo avrà anche un figlio "servlet-class" che contiene il nome pienamente qualificato della classe Java che definisce quella servlet.

Messa così pare complicata (e forse è un po' più complicata di come potrebbe essere se le specifiche fossero un attimino più furbe) ma è veramente una banalità.

Quanto al problema di dover definire delle classi "di servizio", qui dipende dalla dimestichezza che hai con lo sviluppo di programmi Java. Se è poca allora ci vorrà un po' più di tempo per acclimatarsi alla lingua e ai suoi arzigogoli. Ma è tutto qui, una questione di tempo ed esercizio. Vai tranquillo.

nazkul
08-08-2007, 08:57
Ok, più o meno diciamo che ho chiarito molte cose, anche l'ultima spiegazione è chiarissima, non sono riuscito a capire come mai non fa ma devo andare a vedere, credo, chi e come chiama quell'alias /Board.
Ma apparte questo, a questo punto credo sia ora di progettare e implementare la mia applicazione :D
Sarà dura :(
Grazie mille PGI-Bis :)