Portál AbcLinuxu, 10. května 2025 05:35

Dotaz: Rozjeti prvni servletove aplikace

22.9.2009 10:42 Maartin
Rozjeti prvni servletove aplikace
Přečteno: 357×
Odpovědět | Admin

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?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.9.2009 11:26 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná by to chtělo zkompilovat. DatumServlet.java je jen zdroják, tipuji, že by tam místo něj měl být .class soubor (nebo jak se jmenují). Ale v Javě nedělám.
22.9.2009 11:39 Maartin
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace

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...

22.9.2009 11:43 Maartin
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace

Tak vyreseno, do classpath je nedava adresar, ale primo cesta k danemu jaru

javac -cp /opt/tomcat/common/lib/servlet-api.jar DatumServlet.java
22.9.2009 11:46 Maartin
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace

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.

22.9.2009 12:02 dark
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace

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.

22.9.2009 12:13 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace
Pocas vyvoja deployovat aplikaciu v expanded forme a v konfiguracii tomcatu zapnut autoRedeploy; ale to urcite najdes v dokumetacii tomcatu, ze ano.
23.9.2009 15:54 Maartin
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace

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.

finc avatar 23.9.2009 16:32 finc | skóre: 8 | blog: Finc | Kolín
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace
No, pokud je to mala aplikace, tak automaticky redeploy te tolik obtezovat nebude.

Pokud ovsem aplikace zacne narustat a deploy se zacne prodluzovat (deploy meho systemu na glassfish trva cca 1 minutu), tak se musis poohlednout po necem sofistikovanejsim.

Osobne pouzivam JavaRebel, ktery umi udelat tzv. hotswap. Tedy na aplikacnim serveru je jakysi listener, ktery provadi zmenu primo na classloaderu za behu. Pri zmene nejakeho *.java souboru, dam zkompilovat samotny soubor a hned vidim zmenu na serveru.

Ovsem i tento zpusob ma sva omezeni (viz napr. nova trida, atd.). Ale pro zmenu implementaci metod je ten nastroj k nezaplaceni.
Kdo Vam dal pravo ty lidi urazet? A kdo ti dal pravo cumet z okna, ty kr.vo!
default avatar 22.9.2009 19:48 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace
Odpovědět | | Sbalit | Link | Blokovat | Admin

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.

23.9.2009 21:52 init_daemon
Rozbalit Rozbalit vše Re: Rozjeti prvni servletove aplikace
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na servlety sa vykasli. To je styl davno minuly :-D

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.