HTML.it forum
HTML.it HTML.it forum Archive > Lato server > Programmazione > Java
 

[JAVA] Scrivere una servlet su Eclipse

 
cristal
Ciao a tutti...volevo chiedervi, sto seguendo la guida:

[url]http://java.html.it/articoli/leggi/1752/tomcat-lapplicazione-e-servita/3/[/
url]

come vedete, c'è il codice di una servlet.

Ora vorrei creare il file che contenga questa servlet per poi deployarla su
Tomcat. Ho scaricato Eclipse, ma non riesco a capire come devo fare per
scriverla...e in che formato salvarla.

Sapreste dirmi qualcosa in merito?

Grazie...
cristal
Allora...ho eseguito questa esaurientissima guida:

http://java.html.it/articoli/leggi/...i-web/
1/


che spiega come creare una applicazione web con eclipse. L'applicazione fa
inserire nome, cognome, età, e tramite una jsp risponde con una tabella con il
nome, cognome, età inseriti.

mi trovo con tutto tranne che per il funzionamento finale...Ho fatto il deploy
su Tomcat, lancio l'applicazione, mi fa inserire nome cognome età e quando premo
su invia mi esce questa schermata:


HTTP Status 500 -

--------------------------------------------------------------------------------


type Exception report

message

description The server encountered an internal error () that prevented it from
fulfilling this request.

exception

java.io.FileNotFoundException:
.\webapps\MySimpleWebApplication\WEB-INF\etc\users.txt (Impossibile trovare il
percorso specificato)
java.io.FileOutputStream.openAppend(Native Method)
java.io.FileOutputStream.<init>(Unknown Source)
java.io.FileOutputStream.<init>(Unknown Source)
java.io.FileWriter.<init>(Unknown Source)
dati.UserIO.addItem(UserIO.java:11)
controller.SimpleController.doGet(SimpleController.java:40)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache
Tomcat/6.0.6 logs.

Cosa vuol dire?

grazie...
andbin
Citazione:
Originariamente inviato da cristal
java.io.FileNotFoundException:
.\webapps\MySimpleWebApplication\WEB-INF\etc\users.txt (Impossibile trovare il
percorso specificato)

Cosa vuol dire?
Che evidentemente il path non è appropriato! Nel senso
che il path che hai usato è relativo alla directory corrente ma .... quale è la
directory corrente?? Non lo sai a priori, dipende dal servlet
container/application server!!

Puoi usare getRealPath() di ServletContext per ottenere un path reale sul
file-system locale in base ad un path riferito alla root del tuo contesto.

Per chiarire, se chiedi il real path di "/WEB-INF/etc/users.txt" puoi ottenere
ad esempio "C:\......\tomcat\webapps\nomeTuaApp\WEB-INF\etc\users.txt".

Nota: non funziona se la applicazione è deployata in un WAR e il servlet
container/application server usa direttamente il WAR senza spacchettarlo
(generalmente lo spacchettano ... perlomeno Tomcat lo fa per default).
 
cristal
Citazione:
Originariamente inviato da andbin
Che evidentemente il path non è appropriato! Nel senso che il path che hai usato
è relativo alla directory corrente ma .... quale è la directory corrente?? Non
lo sai a priori, dipende dal servlet container/application server!!

Nota: non funziona se la applicazione è deployata in un WAR e il servlet
container/application server usa direttamente il WAR senza spacchettarlo
(generalmente lo spacchettano ... perlomeno Tomcat lo fa per default).



ciao...grazie mille per la risposta.
Allora, ho inserito manualmente il percorso che è:
C:\Programmi\Apache Software Foundation\Tomcat
6.0\webapps\MySimpleWebApplication\WEB-INF\etc\users.txt

tuttavia adesso su eclipse ho proprio una segnalazione di problema:

Invalid escape sequence (valid ones are \b \t \n \f \r \" ' \\ )

penso sia dovuto agli spazi....come si può risolvere?


Citazione:
Puoi usare getRealPath() di ServletContext per ottenere un path reale sul
file-system locale in base ad un path riferito alla root del tuo contesto.

Per chiarire, se chiedi il real path di "/WEB-INF/etc/users.txt" puoi ottenere
ad esempio "C:\......\tomcat\webapps\nomeTuaApp\WEB-INF\etc\users.txt".


Con questo metodo getRealPath() non penso proprio di saperlo fare.... :(

Citazione:
Nota: non funziona se la applicazione è deployata in un WAR e il
servlet container/application server usa direttamente il WAR senza spacchettarlo
(generalmente lo spacchettano ... perlomeno Tomcat lo fa per default).


Uso Tomcat, quindi per questo non ho problemi...

grazie ancora
 
andbin
Citazione:
Originariamente inviato da cristal
ciao...grazie mille per la risposta.
Allora, ho inserito manualmente il percorso che è:
C:\Programmi\Apache Software Foundation\Tomcat
6.0\webapps\MySimpleWebApplication\WEB-INF\etc\users.txt

tuttavia adesso su eclipse ho proprio una segnalazione di problema:

Invalid escape sequence (valid ones are \b \t \n \f \r \" ' \\
)
Se scrivi il path come stringa "literal" nel sorgente, il carattere \ è
speciale, se vuoi avere davvero il carattere \ devi raddoppiarlo: \\
 
cristal
Citazione:
Originariamente inviato da andbin
Se scrivi il path come stringa "literal" nel sorgente, il carattere \ è
speciale, se vuoi avere davvero il carattere \ devi raddoppiarlo: \\


Perfetto...avevo trovato una guida che diceva questo, ma più mettevo le \\ nel
percorso, più mi segnava errore nel path e non sono arrivato fino alla fine...
:)

ok ora funziona simulando da Eclipse, mentre su Tomcat ho ancora un problema.
Dopo aver deployato il file .war, lancio l'applicazione e mi fa inserire nome,
cognome, età ma poi premendo su invia mi esce:


HTTP Status 404 - /MySimpleWebApplication/SimpleController

type Status report

message /MySimpleWebApplication/SimpleController

description The requested resource (/MySimpleWebApplication/SimpleController) is
not available.


Sai da cosa possa dipendere?

EDIT:
N.B. Mi viene segnalato questo marker:
The serializable class SimpleController does not declare a static final
serialVersionUID field of type long


grazie ancora...
 
andbin
Citazione:
Originariamente inviato da cristal
HTTP Status 404 - /MySimpleWebApplication/SimpleController

type Status report

message /MySimpleWebApplication/SimpleController

description The requested resource (/MySimpleWebApplication/SimpleController) is
not available.


Sai da cosa possa dipendere?
Beh ma bisogna vedere a cosa fa riferimento
quel SimpleController .... ad una servlet? L'hai dichiarata nel Deployment
Descriptor (web.xml)??
 
cristal
Citazione:
Originariamente inviato da andbin
Beh ma bisogna vedere a cosa fa riferimento quel SimpleController .... ad una
servlet? L'hai dichiarata nel Deployment Descriptor (web.xml)??


si è una servlet:

codice PHP:

package controller
;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
import business.User;
import dati.UserIO;

/**
* Servlet implementation class for Servlet: SimpleController
*
*/
public class SimpleController extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet
{
  
/* (non-Java-doc)
   * @see javax.servlet.http.HttpServlet#HttpServlet()
   */
  
public SimpleController()
  {
    
super();
  }
  
  
/* (non-Java-doc)
   * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
HttpServletResponse response)
   */
  
protected void doGet(HttpServletRequest requestHttpServletResponse response)
throws ServletExceptionIOException
  
{
    
String nome request.getParameter("nome");
    
String cognome request.getParameter("cognome");
    
String eta request.getParameter("eta");

    
User user = new User();
    
user.setNome(nome);
    
user.setCognome(cognome);
    
user.setEta(eta);
    
// Ricordarsi di creare la directory etc specificata!
    
UserIO.addItemuser"C:\Program Files\Apache Software Foundation\Tomcat
6.0\webapps\MySimpleWebApplication\WEB-INF\etc\users.txt"
);
    
    
HttpSession session request.getSession();
    
session.setAttribute("user"user);
    
    
RequestDispatcher dispatcher;
    
dispatcher getServletContext().getRequestDispatcher(
          
"/ShowUser.jsp");
    
dispatcher.forward(request,response);

  }
  
  
/* (non-Java-doc)
   * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
   */
  
protected void doPost(HttpServletRequest requestHttpServletResponse
response
throws ServletExceptionIOException
  
{
    
this.doGet(requestresponse);
  }
}


Nel web.xml c'è, penso si sia generata in automatico.
 
cristal
Citazione:
Originariamente inviato da cristal

EDIT:
N.B. Mi viene segnalato questo marker:
The serializable class SimpleController does not declare a static final
serialVersionUID field of type long


Questo l'ho risolto con:
http://java.sun.com/j2se/1.5.0/docs...tml#410
0


inserendo:
private static final long serialVersionUID = 3487495895819393L;
nella servlet SimpleController, nella classe SimpleController.
 
cristal
Allora....funziona tutto anche su Tomcat.

Non ho fatto altro che sistemare quel marker e creare la cartella etc senza il
file dentro users.txt (prima l'avevo creata con il file users.txt dentro e come
prima schermata mi compariva già quella con il risultato - uscivano dei NULL -
anzichè quella con l'inserimento).

Giusto per approfondire ho ancora qualche dubbio....

- come mai funziona senza creare il file users.txt nella cartella etc? Come fa
ad autocrearsi?

- dicevi di usare il metodo getRealPath()....
sto leggendo qui:
http://java.sun.com/j2ee/sdk_1.3/te...tml#getRealPath(java.lang.String)

ma come posso inserire l'url del file?



grazie ancora...

Trova la soluzione al tuo problema, cerca tra le guide di HTML.it

Loading

Powered by: Search Engine Indexer and vBulletin v2.3.6
Copyright © 2000 - 2002, Jelsoft Enterprises Limited