Portál AbcLinuxu, 2. listopadu 2025 08:20
Dobry den, postupuji podle tohoto navodu:
http://www.linuxzone.cz/index.phtml?ids=2&idc=179
a chci tu aplikaci zprovoznit. Do slozky webapps jsem nahral adresar test s timto obsahem:
test/
`-- WEB-INF
|-- classes
| `-- DatumServlet.java
`-- web.xml
Pokud vsak zadam do prohlizece http://localhost:8080/test/servlet/Datum objevi se chybove hlaseni HTTP Status 500 s timto textem:
exception javax.servlet.ServletException: Wrapper cannot find servlet class DatumServlet or a class it depends on 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:875) 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:619) root cause java.lang.ClassNotFoundException: DatumServlet org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1386) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232) 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:875) 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:619)
Co mi jeste taky neni jasne, proc kdyz v prohlizeci potom zmacnu F5, tak dostanu error 404 a chybovou hlasku vyse uvidim znovu pouze az restartuji tomcat - cim to je?
Ano, asi mate pravdu, ono je to vlastne i v tom navodu. Jenze kdyz chci soubor zkompilovat:
$ javac DatumServlet.java
DatumServlet.java:1: package javax.servlet does not exist
import javax.servlet.*;
^
DatumServlet.java:2: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
DatumServlet.java:5: cannot find symbol
symbol: class HttpServlet
public class DatumServlet extends HttpServlet {
^
DatumServlet.java:8: cannot find symbol
symbol : class ServletConfig
location: class DatumServlet
public void init(ServletConfig config)
^
DatumServlet.java:9: cannot find symbol
symbol : class ServletException
location: class DatumServlet
throws ServletException {
^
DatumServlet.java:19: cannot find symbol
symbol : class HttpServletRequest
location: class DatumServlet
protected void doGet(HttpServletRequest req,
^
DatumServlet.java:20: cannot find symbol
symbol : class HttpServletResponse
location: class DatumServlet
HttpServletResponse res)
^
DatumServlet.java:21: cannot find symbol
symbol : class ServletException
location: class DatumServlet
throws ServletException, java.io.IOException {
^
DatumServlet.java:26: cannot find symbol
symbol : class HttpServletRequest
location: class DatumServlet
protected void doPost(HttpServletRequest req,
^
DatumServlet.java:27: cannot find symbol
symbol : class HttpServletResponse
location: class DatumServlet
HttpServletResponse res)
^
DatumServlet.java:28: cannot find symbol
symbol : class ServletException
location: class DatumServlet
throws ServletException, java.io.IOException {
^
DatumServlet.java:33: cannot find symbol
symbol : class HttpServletRequest
location: class DatumServlet
protected void processRequest(HttpServletRequest req,
^
DatumServlet.java:34: cannot find symbol
symbol : class HttpServletResponse
location: class DatumServlet
HttpServletResponse res)
^
DatumServlet.java:35: cannot find symbol
symbol : class ServletException
location: class DatumServlet
throws ServletException, java.io.IOException {
^
DatumServlet.java:10: cannot find symbol
symbol : variable super
location: class DatumServlet
super.init(config);
^
15 errors
Nemuze najit javax.servlet. Ok, tedy. Zjistil jsem, ze tato trida se nachazi zde: /opt/tomcat/common/libs/servlet/servlet-api.jar. Zkusil jsem tedy soubor prelozit se zadanym classpatch takto:
javac -cp /opt/tomcat/common/lib DatumServlet.java
Ale vybafla na me presne ta stejna chyba...
Tak vyreseno, do classpath je nedava adresar, ale primo cesta k danemu jaru
javac -cp /opt/tomcat/common/lib/servlet-api.jar DatumServlet.java
Ale jeste bych mel jeden dotaz. Jak udelat, abych po zmene servletu (editace zdrojaku a jeho opetovna komilace) nemusel vzdy restartovat cely Tomcat kvuli tomu, aby se zmena projevila.
Ahoj,
zkoušels použít maven? Ze začátku to může být opruz, ale je schopný ti stáhnout všechny závisloti a netbeans s ním umí přimo pracovat. Bez restartu tomcatu nevim jestli to půjde, někteří na to používají jetty, ale ten to taky myslím neumí (když změníš třídu). Já používám na vývoj glassfish.
To bude snad to co potrebuji.
1) Expanded forma - tim je myslena aplikace co neni zabalena do war archivu?
2) Muzete me prosim odkazat do dokumentace, kde se resi autoRedeploy, nejak to tam nemuzu najit.
Jen taková poznámka: Default Package byl deprekován někdy v dobách Java SE 2. Vše by mělo být v balíčcích. Class Loadeři mívají s default packagem občas problém.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.