Newsgroup: it.comp.java
Titolo: Apache Tomcat e caricamento di servlet

Salve,
Per fini universitari ho dovuto ultimamente riprendere in mano il
server web Apache Tomcat, nonostante in passato abbia già avuto
qualche brutta esperienza a riguardo, pur riuscendo alla fine a far
andare tutto.
Il mio problema è il seguente, nella creazione di una semplice servlet
di test:
- Scaricato e scompattato Tomcat
- Avviato il servizio in listen sulla 8080
- Creato la directory webapps/testservlet
- Creato la directory webapps/testservlet/WEB-INF
- Creato il file webapps/testservlet/WEB-INF/web.xml con il seguente
contenuto:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="
http://java.sun.com/xml/ns/javaee
"
        xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"
        xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
"
        version="2.5">
        <servlet>
                <servlet-name>testservlet</servlet-name>
                <servlet-class>TestServlet</servlet-class>
        </servlet>
        <servlet-mapping>
                <servlet-name>testservlet</servlet-name>
                <url-pattern>/testservlet</url-pattern>
        </servlet-mapping>
</web-app>
- Creata la directory webapps/testservlet/WEB-INF/classes
- Creato il file webapps/testservlet/WEB-INF/classes/TestServlet.java
con il seguente contenuto:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet  {
        public void doGet(
                        HttpServletRequest req,
                        HttpServletResponse resp)
                throws IOException, ServletException
        {
                resp.setContentType("text/html");
                PrintWriter out = resp.getWriter();
                out.println (
                                "<html>\n" +
                                "<head>\n" +
                                "<title>Test</title>\n" +
                                "</head>\n" +
                                "<body>\n" +
                                "<h1>Testing...</h1>\n" +
                                "</body>\n" +
                                "</html>\n"
                                );
        }
}
- Compilato via javac senza problemi, creando la classe
TestServlet.class (avevo ovviamente aggiunto al CLASSPATH il jar delle
API per l'uso di servlet di Tomcat)
Tuttavia, quando vado a richiedere la servlet così creata, ottengo un
bell'errore 500 per mancata esecuzione che non riesco sinceramente a
concepire:
elinks 
http://localhost:8080/testservlet/testservlet
   type Exception
report
   message
   description The server encountered an internal error () that
prevented it from fulfilling this request.
   exception
javax.servlet.ServletException: Error allocating a servlet instance
        org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:102)
        org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:286)
        org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:845)
        org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run
(JIoEndpoint.java:447)
        java.lang.Thread.run(Thread.java:619)
   root cause
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
        java.lang.ClassLoader.defineClass1(Native Method)
        java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        java.security.SecureClassLoader.defineClass
(SecureClassLoader.java:124)
        java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        java.security.AccessController.doPrivileged(Native Method)
        java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        org.apache.catalina.loader.WebappClassLoader.loadClass
(WebappClassLoader.java:1302)
        org.apache.catalina.loader.WebappClassLoader.loadClass
(WebappClassLoader.java:1233)
        org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:102)
        org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:286)
        org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:845)
        org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run
(JIoEndpoint.java:447)
        java.lang.Thread.run(Thread.java:619)
E ricordo che inizialmente invece il tutto andava bene, con lo stesso
XML e la stessa servlet...
Il CLASSPATH è così impostato:
.:..:/opt/jconnector/mysql-connector.jar:/opt/tomcat/lib/servlet-
api.jar:/opt/tomcat/lib/jsp-api.jar:/opt/tomcat/lib/catalina.jar:/opt/
tomcat/lib/tomcat-coyote.jar
e la versione di Java installata è la 1.6.0.
Non so più sinceramente dove sbattere la testa, dato che pare che la
servlet e la configurazione non abbiano nulla di errato ma il server
non riesce a mandarla in esecuzione...

 non riesce a mandarla in esecuzione...
sei cosciente che testservlet e' diverso da TestServlet, "ai ope so"
--
ac

 java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
beh non č molto regolare che tomcat non trovi quella classe. non sapendo 
cosa hai "pasticciato", ti consiglio di ripartire da una installazione 
fresca del tomcat assicurandoti che non sia definito nessun classpath 
per lo startup (non ne ha bisogno).

 beh non è molto regolare che tomcat non trovi quella classe. non sapendo
cosa hai "pasticciato", ti consiglio di ripartire da una installazione
fresca del tomcat assicurandoti che non sia definito nessun classpath
per lo startup (non ne ha bisogno).
Mah sono abbastanza sicuro che non è il CLASSPATH il problema,
altrimenti non riuscirei nemmeno a compilare...
In ogni caso, ora sono riuscito a farla andare facendo il deploy in un
WAR e caricandolo dal manager di Tomcat. Ma non mi sembra molto
normale come comportamento. Con il WAR va, con la directory già
scompattata in webapps ho 500. E per effettuare una modifica, devo
stoppare il server, scompattare il WAR, effettuare le modifiche,
ricompilare la classe, ricreare il WAR, riavviare il server, rifare il
deploy dell'applicazione nel manager. Dite che c'è qualcosa che non va
in tutto questo...?

 in tutto questo...?
di pseudo-misteri se ne vedono tanti... da qua di sicuro spiegazioni non 
ne posso dare.
-- 
++ questo messaggio è scritto in forma ridotta per venire incontro alle 
vostre capacità mentali
http://unopuntozero.wordpress.com/
http://www.flickr.com/photos/marko_po/

 ha scritto nel messaggio
news:f52bcc49-a60f-46a7...@b31g2000prb.googlegroups.com...
Salve,
Per fini universitari ho dovuto ultimamente riprendere in mano il
server web Apache Tomcat, nonostante in passato abbia gi� avuto
qualche brutta esperienza a riguardo, pur riuscendo alla fine a far
andare tutto.
Il mio problema � il seguente, nella creazione di una semplice servlet
di test:










Tuttavia, quando vado a richiedere la servlet cos� creata, ottengo un

elinks 
http://localhost:8080/testservlet/testservlet
   type Exception
report
   message




Il CLASSPATH � cos� impostato:
.:..:/opt/jconnector/mysql-connector.jar:/opt/tomcat/lib/servlet-
api.jar:/opt/tomcat/lib/jsp-api.jar:/opt/tomcat/lib/catalina.jar:/opt/
tomcat/lib/tomcat-coyote.jar
e la versione di Java installata � la 1.6.0.
Non so pi� sinceramente dove sbattere la testa, dato che pare che la
