Visualizza la versione completa : [JAVA] Scrivere una servlet su Eclipse
Ciao a tutti...volevo chiedervi, sto seguendo la guida:
http://java.html.it/articoli/leggi/1752/tomcat-lapplicazione-e-servita/3/
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...
Allora...ho eseguito questa esaurientissima guida:
http://java.html.it/articoli/leggi/2047/usare-eclipse-per-applicazioni-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...
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).
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?
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.... :(
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
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: \\
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...
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)??
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:
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(HttpServletRe quest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
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.addItem( user, "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(HttpServletR equest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.doGet(request, response);
}
}
Nel web.xml c'è, penso si sia generata in automatico.
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/guide/serialization/spec/class.html#4100
inserendo:
private static final long serialVersionUID = 3487495895819393L;
nella servlet SimpleController, nella classe SimpleController.
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/techdocs/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String)
ma come posso inserire l'url del file?
grazie ancora...