Probleme mit web.xml zu Servlet

schlseb

Mitglied
Hallo allerseits,
ich habe für ein Servlet eine web.xml generiert, bekomme aber beim Start von Tomcat Fehlermeldungen, die ich nicht verstehe, vielleicht kann mir jmd sagen was ich vergessen hab bzw. ich falsch mache. Besten dank schon mal im Voraus.

web.xml Datei:
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app id="WebApp_9" 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>Servlet 2.4 application</display-name>

	<context-param>
		<param-name>MaxQuestions</param-name>
		<param-value>6</param-value>
	</context-param>
	<context-param>
		<param-name>ImagePath</param-name>
		<param-value>./img/</param-value>
	</context-param>
	<listener>
		<listener-class>quiz.QuizServlet</listener-class>
	</listener>
	<servlet>
		<servlet-name>QuizServlet</servlet-name>
		<servlet-class>quiz.QuizServlet</servlet-class>
		<init-param>
		    <param-name>DBUrl</param-name>
		    <param-value>jdbc:odbc</param-value>
		</init-param>
		<init-param>
		    <param-name>DBName</param-name>
		    <param-value>questions</param-value>
		</init-param>

		<init-param>
	    		<param-name>user</param-name>
	    		<param-value></param-value>
		</init-param>
		<init-param>
	    		<param-name>password</param-name>
	    		<param-value></param-value>
		</init-param>
		<init-param>
	    		<param-name>JSPPath</param-name>
	    		<param-value>/</param-value>
		</init-param>
		<init-param>
	    		<param-name>TempFilePath</param-name>
	    		<param-value>C:/TEMP/</param-value>
		</init-param>
		<init-param>
	    		<param-name>IdleTime</param-name>
	    		<param-value>60</param-value>
		</init-param>
		<init-param>
	    		<param-name>MaxAnswers</param-name>
	    		<param-value>10</param-value>
		</init-param>
		<init-param>
	    		<param-name>QuestionTimeout</param-name>
	    		<param-value>60</param-value>
		</init-param>
		<init-param>
	    		<param-name>TimeBetweenQuestions</param-name>
	    		<param-value>100</param-value>
		</init-param>
		<init-param>
	    		<param-name>SessionInactiveInterval</param-name>
	    		<param-value>40</param-value>
		</init-param>
		<init-param>
	    		<param-name>SessionStartupTime</param-name>
	    		<param-value>60</param-value>
		</init-param>
		<init-param>
	    		<param-name>Verbos</param-name>
	    		<param-value>3</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>QuizServlet</servlet-name>
		<url-pattern>/Quiz</url-pattern>
	</servlet-mapping>

</web-app>

Fehlermeldungen:
Code:
27.10.2007 22:24:27 org.apache.commons.digester.Digester error
SCHWERWIEGEND: Parse Error at line 5 column 103: Document root element "web-app", must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "web-app", must match DOCTYPE root "null".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1652)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1931)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:795)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:878)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(XMLDocumentScannerImpl.java:1157)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1794)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
	at org.apache.commons.digester.Digester.parse(Digester.java:1647)
	at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextConfig.java:220)
	at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:579)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:181)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3643)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1147)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:696)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1147)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:310)
	at org.apache.catalina.core.StandardService.start(StandardService.java:449)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2212)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:458)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:345)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:150)
27.10.2007 22:24:27 org.apache.commons.digester.Digester error
SCHWERWIEGEND: Parse Error at line 5 column 103: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1941)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:795)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:878)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(XMLDocumentScannerImpl.java:1157)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1794)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
	at org.apache.commons.digester.Digester.parse(Digester.java:1647)
	at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextConfig.java:220)
	at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:579)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:181)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3643)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1147)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:696)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1147)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:310)
	at org.apache.catalina.core.StandardService.start(StandardService.java:449)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2212)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:458)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:345)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:150)

_________________________________________________________________________
Auch bei diesem Problem könnte ich fachmännische Hilfe gebrauchen:
http://www.tutorials.de/forum/javas...r-include-befehl-ein-andere-geladen-wird.html
 
Ich weiß nicht, ob's hilft, aber ich hab noch ein Attribut mehr im Element 'web-app' (Namespace-Attribut)...
Bin aber noch neu in der Materie, aber das fiel mir auf.

<web-app
id="..."
version="..."
xmlns:xsi="..."
xmlns="..."
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="...">
 
Hallo und danke für die schnelle Antwort. Muss dann bei xsi:schemaLocation das Attribut anders lauten? Da stehen ja praktisch 2 URLs drin, von denen letztere der ähnelt, die du unter xmlns:web eingetragen hast. Ich hab mir den Kopf einfach aus nem anderen Beispiel rauskopiert, hab also auch net wirklich ne Ahnung wie das korrekt aussehen müsste.
 
Versuch es mal so...

Code:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_9" version="2.5">
 
Hallo katerTom,
ich habs versucht, aber es werden immer noch dieselben Fehler angezeigt, diesmal halt in Zeile 6 Spalte 134, also am Ende von <web-app...
Stimmt denn XML 1.0?
 
Hi,

irgendwie ist das Problem seltsam. Du sagst, Du hast die web.xml "generiert"?
So wie ich es verstehe, schlägt die Validierung der xml-Datei fehl:
Document root element "web-app", must match DOCTYPE root "null".
Diese forderung impliziert, dass es ein DOCTYPE (sprich eine dtd zur Validierung geben muss.

Allerdings benutzt Du ein Schema (xsd-Datei) zur Validierung. So wie es aussieht, sucht der SAXParser nach einer DTD.

dtd-, bzw. xsd-Dateien stellen die "Grammatik" des XML-Dokuments dar. Deine Ausgabe enthielt folgendes:
SCHWERWIEGEND: Parse Error at line 5 column 103: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.

Somit kann ich mir vorstellen, dass Tomcat einfach nicht weiß, dass man mittlerweile (ab Servlet 2.4) mit Schemas validieren kann.
Vielleicht unterstützt Dein Tomcat nur 2.3? Welche Tomcatversion hast Du?

Dann könntest Du es mal damit probieren:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_9">
 
Zuletzt bearbeitet:
Hey, danke das hat tatsächlich geholfen, jetzt erhalte ich keine Fehlermeldungen mehr.
Ich verwende Tomcat 4.1 - mit Version 5 hab ich es früher mal probiert, aber da hat sich der Server irgendwann einfach nicht mehr starten lassen und deswegen hab ich zu 4.1 gewechselt.
 

Neue Beiträge

Zurück