Internal Servlet Error:
java.lang.IllegalStateException: Can't happen - classname is null, who
added this ?
at
org.apache.tomcat.core.ServletWrapper.loadServlet(ServletWrapper.java:261)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:289)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.handleStatus(ContextManager.java:1075)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:784
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:752)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:536)
La ver di Tomcat che uso e' la 3.2.4
Qualcuno sa dirmi a cosa e' dovuto e se c'e' un modo per evitarlo,
escluso quello di riavviare Tomcat?
Grazie a tutti.
ciao
Questo non e' vero!! Le JSP vengono precompilate per diventare delle
Servlet vere e proprie. E' questo il punto forte della tecnologia JSP.
>
>ciao
>
>
> >devi per forza riavviare tomcat in quanto le servlet si caricano in
memoria
> >la prima volta che le usi e poi restano li per essere utilizzate, se
cambi
> >il codice per rieseguirlo devi per riavviare tomcat
> >cio non avviene con le pagine jsp perchè vengono processate a tempo
> >di esecuzione
> Questo non e' vero!! Le JSP vengono precompilate per diventare delle
> Servlet vere e proprie. E' questo il punto forte della tecnologia JSP.
Fatto sta che la procedura sopra descritta e' vera: se modifichi il sorgente
di una JSP non c'è bisogno di riavviare Tomcat. Non so bene come funzioni,
ma se e' vero anche quello che dici tu, allora significa che Tomcat si
accorge delle modifiche e ricompila solo se la JSP e' stata modificata
dall'ultima esecuzione.
Il fatto e' che se le pagine JSP rimangono istanziate come servlet e
tutte le variabili reference istanziate al loro interno non possono
essere cambiate dinamicamente non appena ricompili le classi: molto
semplicemente devi reistanziare le JSP se vuoi che le classi appena
compilate siano puntate correttamente.
LA JVM non fa ancora i miracoli.....
>Il fatto e' che se le pagine JSP rimangono istanziate come servlet e
>tutte le variabili reference istanziate al loro interno non possono
>essere cambiate dinamicamente non appena ricompili le classi: molto
>semplicemente devi reistanziare le JSP se vuoi che le classi appena
>compilate siano puntate correttamente.
Grazie, mi sei stato molto utile.
Reinstanziare significa salvare di nuovo le pagine jsp che usano le
classi che ho modificato (anche se in queste non ho fatto alcuna
modifica), in modo che le servlet vecchie vengano sostituite?
Questo mi eviterebbe quell'errore senza riavviare tomcat?
ciao
Si, questo funziona con qualsiasi oggetto istanziato direttamente o
indirettamente dalla tua pagina JSP.
Fai attenzione se lavori con metodi statici o variabili statiche: in
questo caso tali metodi o variabili vengono istanziati (e quindi
caricati) solamente al'avvio del server.
Non so, pero', cosa succede quando metodi e variabili statici si
trovano all'interno di classi istanziate dalla JSP. Questo lo lascio
da provare a te.
Ciao.