PDA

View Full Version : [Java] Creare dell'html con una servlet


Edde
28-09-2006, 21:25
Ciao :)

Ho una serlvet che mi crea del codice html. Il problema è che non riesco ad inserire delle img in questa pagina linkandole dal mio disco rigido. E' come se non riuscisse a trovarle. Se invece le piazzo sul web e inserisco il link funziona tutto...

Posto i due esempi (il primo non funziona, il secondo si... non fate caso ai tag differenti... il risultato non cambia cmq):

out.println("<td><button name='sinonimi' type='submit'><img src=\"file:///C:\\Programmi\\Programmatio\\Tomcat 5.5\\webapps\\Ose\\img\\sinonimi.jpg\" width=\"100\" height=\"50\"></button></td>");

--------

out.println("<td><input name='sinonimi' type='image' src=\"http://img61.imageshack.us/img61/8447/sinonimiwl1.jpg\" width=\"100\" height=\"50\" value=\"sinonimi\"></td>");


Come posso risolvere?
Grazie :)

andbin
28-09-2006, 21:40
Posto i due esempi (il primo non funziona, il secondo si... non fate caso ai tag differenti... il risultato non cambia cmq):

out.println("<td><button name='sinonimi' type='submit'><img src=\"file:///C:\\Programmi\\Programmatio\\Tomcat 5.5\\webapps\\Ose\\img\\sinonimi.jpg\" width=\"100\" height=\"50\"></button></td>");

--------

out.println("<td><input name='sinonimi' type='image' src=\"http://img61.imageshack.us/img61/8447/sinonimiwl1.jpg\" width=\"100\" height=\"50\" value=\"sinonimi\"></td>");


Come posso risolvere?Ma ovvio!! Non puoi mandare al client un riferimento ad un path residente in locale sul server!!!!

Concettualmente potrebbe funzionare se client e server "sono" sulla stessa macchina e il path fosse corretto. Ma alcuni browser non permettono di visualizzare immagini in locale da una pagina web.

texerasmo
29-09-2006, 16:16
infatti è questione di path
Metti il path in questo modo /images/img.gif
/ rappresenta la root della tua web-application

oppure
puoi creare dei virtual path ma devi modificare il server.xml

Edde
30-09-2006, 11:20
infatti è questione di path
Metti il path in questo modo /images/img.gif
/ rappresenta la root della tua web-application

oppure
puoi creare dei virtual path ma devi modificare il server.xml

Scusa, sto provando, ma non mi riesce...
Allora, sto usando tomcat, e la mia applicazione si trova all'interno di:

\Tomcat 5.5\webapps\Ose

Ho provato a mettere la cartella delle img sia in:

\Tomcat 5.5\webapps\Ose\img

che in

\Tomcat 5.5\webapps\Ose\WEB-INF\img

Ma chiamando dalla servlet:

src=\"/img/Sinonimi.jpg\"

Non va... forse ora provo a modificare il file web.xml, ma mi sai dire cmq dove sbaglio?

Grazie :)

Edde
01-10-2006, 18:06
Ho Provato a modificare il file web.xml secondo quanto scritto qui:

http://www.jugsardegna.org/vqwiki/jsp/Wiki?CaricareLeRisorseNelleWebApplicationJ2EE

Continuo ad avere problemi...

Allora, ho aggiunto nel file web.xml la seguente parte:

----------- (Riguarda l'immagine)
<init-param>
<param-name>path</param-name>
<param-value>/WEB-INF/img/Sinonimi.jpg</param-value>
</init-param>

----------- (Riguarda un'altra cosa di cui ora vi dico)

<init-param>
<param-name>pathWordnet</param-name>
<param-value>/WEB-INF/file_properties.xml</param-value>
</init-param>

----------

All'inizio della servlet ho aggiunto le seguenti righe:


ServletConfig cfg = getServletConfig();
String path = cfg.getInitParameter("path");
String dizionario = cfg.getInitParameter("pathWordnet");


Ok. Ora, nella parte in cui dovrei caricare l'iimg ho messo:


out.println("<td><input name='sinonimi' type='image' src=\"file:///"+path+"\" width=\"100\" height=\"50\" value=\"sinonimi\"></td>");


(Omettendo il file:/// non cambia nulla).

Ma continua a non caricare l'immagine nella pagina html creata. D'altra parte a me sembra che con quell'aggiunta nel file web.xml io non stia facendo niente di particolare: aggiungo una "variabile" (in realtà è più una final) di nome path a cui assegno il valore /WEB-INF/img/Sinonimi.jpg
Dal punto di vista dell'applicazione, se io uso la variabile path o scrivo direttamente /WEB-INF/img/Sinonimi.jpg non mi sembra che ci sia differenza, ed infatti non funziona in nessuno dei 2 modi...

Andando alla seconda cosa, io devo leggere il file file_properties.xml per inizializzare un dizionario che poi uso per altre cose, e lo faccio col comando:

JWNL.initialize(new FileInputStream(propsFile));

Dove propsFile prima era:

String propsFile = "C:\\Programmi\\Programmatio\\Tomcat 5.5\\webapps\\Ose\\file_properties.xml";

Mentre ora, per evitare di usare il path assoluto, è diventata semplicemente :

String propsFile = dizionario; (ovvero la stringa pari al valore di pathWordnet, nel file web.xml)

Inutile dire che mi da un errore di "fileNotFound"...

Spero di non aver messo troppa carne sul fuoco, e soprattutto che siate in grado di aiutarmi

Grazie ancora per la pazienza... :D

Ah, è ovvio ma lo dico tanto per chiarezza: il file "file_properties.xml" l'ho spostato in /WEB-INF/ e le immagini sono state messe in /WEB-INF/img/

-----

Edit: Avevo saltato una parte... :doh:
La storia del file_properties.xml l'ho risolta facendomi restituire l'InputStream dal ServletContext, ma il discorso dell'img, facendomi restituire l'URL, ancora non va...
Ci sto lavorando... ma.... :help:

Ari-Edit: Visto che ci sono... volevo eliminare qualsiasi indirizzo assoluto presente nell'applicazione. Usando il discorso sul path virtuale sono quindi riuscito a risolvere quelle parti in cui io devo leggere un file.
Ma ServletContext non ha metodi che restituiscano un OutputStream, se io dovessi invece scrivere un file... in quel caso come potrei procedere?

texerasmo
02-10-2006, 10:57
allora.
non credo che sia corretto mettere sotto WEB-INF la cartella img
sotto WEB_INF vi dovrebbe essere solamente classes e lib e il file web.xml

Per le img prova a fare così

img src="/img/nome.jpg" e basta. oppure se proprio non ti funziona prova a fare così

img src="/OSE/img/nome.jpg"


per il discorso path virtuale devi usasre il server.xml

Per il file non found se undi un file di itpo properties devi posizionarlo vicino alla calsse se usi un file .xml invece devi metterci il path assoluto esempio
c:\.....


ok?

Edde
02-10-2006, 13:30
allora.
non credo che sia corretto mettere sotto WEB-INF la cartella img
sotto WEB_INF vi dovrebbe essere solamente classes e lib e il file web.xml

Per le img prova a fare così

img src="/img/nome.jpg" e basta. oppure se proprio non ti funziona prova a fare così

img src="/OSE/img/nome.jpg"


per il discorso path virtuale devi usasre il server.xml

Per il file non found se undi un file di itpo properties devi posizionarlo vicino alla calsse se usi un file .xml invece devi metterci il path assoluto esempio
c:\.....


ok?

/Ose/img/nome.jpg funge :D
Ero sicuro di averlo già provato, ma evidentemente mi sbagliavo.
Il file not found l'ho risolto facendomi restituire l'inputStream dal servletContext.

Riguardo all'outputstream mi sai dire qualcosa?

Ancora grazie :)

redcloud
02-10-2006, 16:51
Scusa non aiuto la tua causa ma visto che si parla di path...

io ho una servlet che deve accedere a un file properties che risiede sul server. Se do il path assoluto tutto ok, ma per il relativo... :muro: Ho provato a prendere la cwd dalla stessa servlet ma mi dice tutt'altro percorso! Per esempio se la servlet si trova in /usr/local/tomcat/webapps/application/WEB-INF/classes/servlet.class, cwd mi restituisce /home/redcloud :muro: :muro: :muro:

Poi per scrupolo il file properties l'ho messo sia in

...../webapps/application/WEB-INF/classes/

che in

..../webapps/application/WEB-INF/

che in

..../webapps/application/

che in

..../webapps/

ma nisba :( Per correttezza essendo un file properties relativo a quella applicazione dovrebbe essere contenuto al massimo nella root dell'applicazione stessa!

Edde
02-10-2006, 17:15
Qui forse posso aiutarti io ;)

http://www.jugsardegna.org/vqwiki/jsp/Wiki?CaricareLeRisorseNelleWebApplicationJ2EE

Verso la fine fa proprio l'esempio con un property.

texerasmo
02-10-2006, 17:27
Non ho capito bene l'altro pb

cmq
se usi un file .properties che è fatto in questo modo
chiave=valore
il file deve stare vicino alla classe.

se unsi un file.xml devi metterci tutto il path a partire dalla root.

ok?

redcloud
02-10-2006, 17:58
Qui forse posso aiutarti io ;)

http://www.jugsardegna.org/vqwiki/jsp/Wiki?CaricareLeRisorseNelleWebApplicationJ2EE

Verso la fine fa proprio l'esempio con un property.
L'esempio è ottimo ma se volessi inserire staticamente il path relativo all'interno di un'altra classe chiamata dalla servlet?

redcloud
02-10-2006, 22:32
Non ho capito bene l'altro pb

cmq
se usi un file .properties che è fatto in questo modo
chiave=valore
il file deve stare vicino alla classe.

se unsi un file.xml devi metterci tutto il path a partire dalla root.

ok?
Io uso un file properties chiave=valore e l'ho messo nella stessa dir della classe che lo usa ma nisba :(