Newsgroup: it.comp.java
Titolo: Errore con servlet

Sto provando a scrivere con Eclipse una servlet ma ottengo sempre la
seguente finestra di errore:
http://localhost:8080/ProvaDynamicWebProject/WEB-INF/classes/HelloWorld.java
HTTP Status 404 -
--------------------------------------------------------------------------------
type Status report
message
description The requested resource () is not available.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.28
**********************************************************************
Di seguito descrivo il problema:
Ho scaricato Tomcat 5.5.28 e ho settato le variabili d'ambiente
CATALINA_HOME a "c:\Tomcat\apache-tomcat-5.5.28" e JRE_HOME a
"c:\Programmi\EasyEclipse Server Java 1.2.2.2\jre"
- poi da Eclipse ho selezionato la perspective "J2EE"
- ho cliccato con il tasto destro del mouse su "Project Explorer" poi
su "New" e poi su "Dynamic Web Project"
- nella finestra che appare ho scritto "ProvaDynamicWebProject" e ho
cliccato su "Finish"
- poi ho cliccato con il tasto destro del mouse su "ProvaDynamicWebProject"
e poi su "New" e poi su "Servlets"
- ho chiamato la classe "HelloWorld" e ho scritto la classe che riporto
alla fine di questo messaggio
- quando provo a lanciare il programma (Run As -> Run on Server) mi
appare una finestra con scritto "Could not find a client that is able
to launch the selection"
- le volte dopo che ri-provo a lanciare il programma mi appare una
finestra con una checkbox con scritto "Update context root for Web
module ProvaDynamicWebProject"
- sia che attivo che disattivo la checkbox quando clicco su "Finish"
mi appare la finestra d'errore scritta all'inizio di questo messaggio.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
 public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException
 {
  response.setContentType("text/html");
  PrintWriter out=response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out.println("<title>Hello World</title>");
  out.println("</head>");
  out.println("<body>");
  out.println("<h1>Hello World</h1>");
  out.println("</body>");
  out.println("</html>");
  out.flush();
 }
 public void doPost(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException
 {
  doGet(request,response);
 }
}

 "c:ProgrammiEasyEclipse Server Java 1.2.2.2jre"
Catalina home e jre home non servono
quella che serve e' JAVA_HOME
settata quella prova a
collegarti a 
localhost:8080 
e cosi' sai se e' acceso il gatto.
Dopo di che
vai nella cartella del tomcat e verifica che sia deployata la tua servlet
cioe' sotto 
...webapp/
ci deve essere qualcosa di tuo e la tua servlet
infine la chiave di tutto e' nel file 
../WEB-INF/web.xml
studiati le -semplicissime- regole del web-xml o eventualmente postacelo
che lo verifichiamo
ciauz Nicola
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 e cosi' sai se e' acceso il gatto.
Lo hai invocato! Ora arriva lui e le sue utility utilissime e FREE. :)

 
http://localhost:8080/ProvaDynamicWebProject/WEB-INF/classes/HelloWorld.java
Non � che per caso �:
http://localhost:8080/ProvaDynamicWebProject/HelloWorld
?

 HTTP Status 404 -
HelloWorld.java ha odore di sorgente Java, non di servlet.
E comunque non puoi accedere direttamente al percorso /WEB-INF.
se nel web.xml ad esempio hai:
<servlet>
   <display-name>HelloWorld</display-name>
   <servlet-name>HelloWorld</servlet-name>
   <servlet-class>tuo.package.HelloWorld</servlet-class>
</servlet>
allora sara' necessario utilizzare l'url:
http://localhost:8080/ProvaDynamicWebProject/HelloWorld
oppure
http://localhost:8080/HelloWorld
se non viene indicato alcun contesto.

 se non viene indicato alcun contesto.
Tutte le volte che lancio la servlet mi appare una finestra con una
checkbox con scritto "Update context root for Web module
ProvaDynamicWebProject".
Ho provato a cambiare l'URL in
"
http://localhost:8080/ProvaDynamicWebProject/HelloWorld
"
ma ottengo la seguente finestra d'errore.
(dopo la finestra riporto il file web.xml)
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it 
from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class HelloWorld
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) java.lang.Thread.run(Thread.java:595)root causejava.lang.Error: Unresolved compilation problems: The import javax.servlet cannot be resolved The import javax.servlet cannot be resolved HttpServlet cannot be resolved to a type HttpServletRequest cannot be resolved to a type HttpServletResponse cannot be resolved to a type ServletException cannot be resolved to a type HttpServletRequest cannot be resolved to a type HttpServletResponse cannot be resolved to a type ServletException cannot be resolved to a type HelloWorld.<init>(HelloWorld.java:2) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:494) java.lang.Class.newInstance0(Class.java:350) java.lang.Class.newInstance(Class.java:303) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) java.lang.Thread.run(Thread.java:595)note The full stack trace of the root cause is available in the ApacheTomcat/5.5.28 logs.--------------------------------------------------------------------------------Apache Tomcat/5.5.28***************************************************************************************************************************************************************************************************************<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4"xmlns="
http://java.sun.com/xml/ns/j2ee
"xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"xsi:schemaLocation="
http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
"> <display-name> ProvaDynamicWebProject</display-name> <servlet>  <description>  </description>  <display-name>  HelloWorld</display-name>  <servlet-name>HelloWorld</servlet-name>  <servlet-class>  HelloWorld</servlet-class> </servlet> <servlet-mapping>  <servlet-name>HelloWorld</servlet-name>  <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> <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></web-app>

 se non viene indicato alcun contesto.
Tutte le volte che lancio la servlet mi appare una finestra con una
checkbox con scritto "Update context root for Web module
ProvaDynamicWebProject".
Ho provato a cambiare l'URL in
http://localhost:8080/ProvaDynamicWebProject/HelloWorld
ma ottengo sempre una finestra d'errore.
Siccome il file e' lungho il testo viene spezzato, quindi nel prossimo
messaggio riporto separatamente la finestra d'errore e nel messaggio
dopo riporto separatamente il file web.xml

*********************************************************************
************************* Finestra d'errore *************************
*********************************************************************


*********************************************************************
****************************** web.xml ******************************
*********************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 
xmlns="
http://java.sun.com/xml/ns/j2ee
" 
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
" 
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee
 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
 <display-name>
 ProvaDynamicWebProject</display-name>
 <servlet>
  <description>
  </description>
  <display-name>
  HelloWorld</display-name>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>


 
L'errore 500 indica che la servlet ha lanciato un'eccezione o e' 
terminata in errore. Infatti nello stack-trace c'e' anche scritto:
javax.servlet.ServletException: Error instantiating servlet class HelloWorld
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
java.lang.Thread.run(Thread.java:595)root cause
java.lang.Error: Unresolved compilation problems:
The import javax.servlet cannot be resolved
The import javax.servlet cannot be resolved
HttpServlet cannot be resolved to a type
HttpServletRequest cannot be resolved to a type
HttpServletResponse cannot be resolved to a type
ServletException cannot be resolved to a type
HttpServletRequest cannot be resolved to a type
HttpServletResponse cannot be resolved to a type
ServletException cannot be resolved to a type
HelloWorld.<init>(HelloWorld.java:2)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
java.lang.reflect.Constructor.newInstance(Constructor.java:494)
java.lang.Class.newInstance0(Class.java:350)
Sembrerebbe che la classe non sia stata compilata.

 Sembrerebbe che la classe non sia stata compilata.
PER FAVORE potrebbe descrivermi PASSO PASSO come fare per creare una
servlet con Eclipse?
La prego di non tralasciare neanche le cose piu' ovvie.
Io uso "EasyEclipse Server Java", che e' una distribuzione di Eclipse
con gia' compresi dei plug-in (tra cui anche Tomcat) per lo sviluppo
di applicazioni web.
Grazie.

 Grazie.
Scaricati il Galileo standard che ha gia' tutto ed e' una bomba
ciauz N
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Grazie.
Scaricati il Galileo standard che ha gia' tutto ed e' una bomba


 La prego di non tralasciare neanche le cose piu' ovvie.
http://www.youtube.com/watch?v=-l0CFxdroTE
http://www.youtube.com/watch?v=JyK9KzkQnQo
ma soprattutto:
http://tinyurl.com/ycmtncf

> Scaricati il Galileo standard che ha gia' tutto ed e' una bomba
Cos'e' Galileo? Un insieme di plug-in? Una distribuzione di Eclipse?
Grazie del consiglio ma preferirei continuare a usare EasyEclipse,
credo che abbia gia' tutto quello che serve per creare applicazioni web
(Hibernate, JBoss, Spring, ...) (che non so' ancora cosa sono)
E poi io ho sempre la banda "stretta", ho dovuto far scaricare
EasyEclipse (214 MB) da un amico e poi far masterizzare il file su un
CD.

 
http://tinyurl.com/ycmtncf
Grazie del consiglio ma io ho sempre la banda "stretta", quindi non
posso vedere YouTube.

 posso vedere YouTube.
il terzo link resta valido.

 il terzo link resta valido.
Su Google ho cercato "eclipse web application tutorial" e ho cliccato
sul primo riferimento "Web Tools Platform", ma per me che ho la banda
stretta la pagina ci mette troppo tempo per essere caricata (e non so'
neanche quante pagine sono); qualcuno che gia' sa come creare Servlet
con Eclipse puo' spiegarmi PASSO PASSO come fare per favore?

 con Eclipse puo' spiegarmi PASSO PASSO come fare per favore?
spiacente, tu hai la banda stretta e io non ho tempo da dedicare a 
scrivere tutorial (già scritti).

il 16.12.2009 14.51, Scrive Bracco Baldo 43502112:

Veramente EasyEclipse non lo conosco. Attualmente sto usando Ganymede 
che e' la versione di eclipse precedente a quella attuale (Galileo), in 
pratica la versione 3.4.
Comunque si fa cosi'
new project, other, web, Dynamic Web project.
Nel wizard specifico:
il nome,
il target runtime se non l'hai gia' usa il bottone new io scelgo tomcat 
v5.5 (ho quello) ed indico la directory in cui e' installato, con il 
bottone browse. Il resto vmi va bene e quindi clikko finish.
Nella directory src creo un package (hello in questo caso) ci creo 
dentro la classe HelloWorld (copio/incollo it tuo codice) salvo.
Clicco destro suservlet del Deployment Descriptor ( che sarebbe poi il 
web.xml) scelgo new, scelgo "Use an existing class or jsp" e con browse 
  scelgo la classe HelloWorld non specifico altro e quindi clicco finish.
Poi clikko destro su HelloWorld scelgo "run as" scelgo "run on server".
La prima volta mi propone i server configurati e chekko "Always use ..." 
cosi' non me lo chiedera' piu'. Altrimenti ho sempre la possibilita' di 
configurare un nuovo server (tramite add o configure) se non lo avessi 
fatto all'atto della creazione del progetto, cosa sconsigliabile, non 
farlo intendo, in quanto specificando il runtime environment, me lo 
aggiunge tra i jar inclusi nel class-path. Clikko quindi su finish e mi 
si apre il browser interno con scritto "Hello World".

il 16.12.2009 17.54, Scrive Bracco Baldo 43502112:

Lï¿œho fatto sopra, ma non so se l'easy eclipse sia uguale al mio.

 apre il browser interno con scritto "Hello World".
Ho seguito le sue istruzioni e la servlet funziona, GRAZIE.
Ora devo studiarci sopra.

 
Bene, non era difficile, no?
Un consiglio, nel caso che hai esposto:
public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
bla bla bla
  }
public void doPost(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
   doGet(request,response);
  }
}
utilizzi sia il metodo doGet che il metodo doPost che pero' richiama a 
sua volta il metodo doGet. Se l'effettiva esigenza e' quella di onorate 
sia i due metodi HTTP GET e POST, avresti potuto utilizzare 
equivalentemente il solo metodo:
  void service(HttpServletRequest request, HttpServletResponse response)
con effetti identici.