# Servlet FacesServlet is not available und



## Dudo (12. Dez 2009)

Hallo,

ich versuche gerade zum ersten mal eine eigene JSF mit Eclipse Galileo zu erstellen.
Benutze den :         tomcat-6.0.20.
und dieses Beispiel : http://www.dpunkt.de/leseproben/2436/Kapitel_1.pdf
eingebundene JARS: jsf-api.jar, jsf-impl.jar, jsp-api-2.1.1, myfaces-api-1.2.0, jstl.jar  

Ich habe hier ganz komische Fehlermeldungen.ptio
Die erste ist immer "Servlet FacesServlet is not available" und gibt eine 
"ClassNotFoundException: javax.faces.webapp.FacesServlet" an, obwohl sich diese in der jsf-api befindet und ich diese eingebunden habe.

Der zweite Fehler ist:
description: "The requested resource () is not available"
encoding="UTF-8"

kann mir jemand mal helfen???
sitze hier schon zwei 
zwei Stunden daran. Hab irgendwie schon alles versucht.

hier nochmal mein Code
web.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<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_ID" version="2.5">
  <display-name>First_JSF</display-name>

  <servlet>
    <servlet-name>FacesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
</web-app>
```

die faces-config.xml:

```
<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    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-facesconfig_1_2.xsd"
    version="1.2">

	<managed-bean>
		<managed-bean-name>person</managed-bean-name>
		<managed-bean-class>Person</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	<navigation-rule>
	 <from-view-id>/seite1.JSP</from-view-id>
	 <navigation-case>
	  <from-outcome>OK</from-outcome>
	  <to-view-id>/seite2.JSP</to-view-id>
	 </navigation-case>
	</navigation-rule>
</faces-config>
```

Ach ja. Am Anfang als ich die JSF Tags, in der Klasse seite1.jsp und seite2.jsp,  eingegeben habe, kannte Eclipse die Tags nicht.
Erst als ich die gleich folgenden Sachen eingegeben habe(hab das zufällig im Netzt gefunden und einfach mal in meine Klassen eingefügt) hat er nicht mehr gemeckert und hat mir auch gleich Empfehlungen für die JSF Tags gegeben.

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
```

Kann man Eclipse irgendwie sagen dass er das automatisch machen soll???

Danke für Hilfe!


----------



## Dudo (12. Dez 2009)

Kann hier nicht mal jemand antworten?


----------



## Krusty (12. Dez 2009)

Ich bin zwar auf dem Gebiet JSF auch noch ein blutiger Anfänger, hoffe aber, meine Hinweise helfen dir irgendwie weiter.



Dudo hat gesagt.:


> eingebundene JARS: jsf-api.jar, jsf-impl.jar, jsp-api-2.1.1, myfaces-api-1.2.0, jstl.jar




Benutzt du die Sun Referenz Implementierung *und* Apache MyFaces gleichzeitig?



Dudo hat gesagt.:


> Kann man Eclipse irgendwie sagen dass er das automatisch machen soll???




Window > Preferences > Java > Editor > Templates


----------



## JavaKaffee (15. Dez 2011)

Mahlzeit.

Auch wenn das Thema hier nicht entsprechend gelöst wurde, wollte ich mein ziemlich ähnliches Problem darstellen.
Ich habe ein (Spring/Hibernate) JSF+PrimeFaces WebProjekt mit NetBeans und Maven aufgesetzt, welches auf meinem Jetty-Container aktuell (man bastelt ja immer mal Mist zwischendurch xD) wunderbar läuft. Das Projekt ist ein Modul eines Gesamtsystems. Soweit ich informiert bin, wird die Anwendung aber auf einem Tomcat laufen und habe daher das Projekt versucht über selbigen zu starten (v6.0.29). Ergebnis:


```
15.12.2011 12:24:35 org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
15.12.2011 12:24:35 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
15.12.2011 12:24:37 org.apache.catalina.core.ApplicationContext log
[B]INFO: Marking servlet Faces Servlet as unavailable[/B]
15.12.2011 12:24:37 org.apache.catalina.core.StandardContext loadOnStartup
SCHWERWIEGEND: Servlet XXXX threw load() exception
java.lang.ClassCastException:[B] javax.faces.webapp.FacesServlet cannot be cast to javax.servlet.Servlet[/B]
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1116)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
        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:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
15.12.2011 12:24:37 org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet performanceMonitor as unavailable
15.12.2011 12:24:37 org.apache.catalina.core.StandardContext loadOnStartup
SCHWERWIEGEND: Servlet XXXXX threw load() exception
java.lang.ClassCastException: [B]etm.contrib.integration.web.HttpConsoleServlet cannot be cast to javax.servlet.Servlet[/B]
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1116)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
        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:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
15.12.2011 12:24:37 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
15.12.2011 12:24:37 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
```

Meine Dependencies (abgesehen von den internen, aus denen ich außerdem die myfaces-api excludiert habe *EDIT:* Ich sehe als transitive Dependency in NetBeans die Servlet-Api 2.3):

```
<dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>  
            <groupId>org.primefaces</groupId>  
            <artifactId>primefaces</artifactId>  
            <version>2.2.1</version>  
        </dependency>
        <dependency>  
            <groupId>org.primefaces.themes</groupId>  
            <artifactId>vader</artifactId>  
            <version>1.0.1</version> 
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>fm.void.jetm</groupId>
            <artifactId>jetm</artifactId>
            <version>${jetm.version}</version>
        </dependency>
        <dependency>
            <groupId>fm.void.jetm</groupId>
            <artifactId>jetm-optional</artifactId>
            <version>${jetm.version}</version>
        </dependency>
```

Meine web.xml:

```
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:XXXXX.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:XXXXX.xml</param-value>
    </context-param>
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>sas-web</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.allowTextChildren</param-name>
        <param-value>true</param-value>
    </context-param>
    [B]<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>[/B]
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>none</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>etm.contrib.integration.web.EtmMonitorContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>performanceMonitor</servlet-name>
        <servlet-class>etm.contrib.integration.web.HttpConsoleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>performanceMonitor</servlet-name>
        <url-pattern>/performance/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
```

Woran liegt es, dass Jetty das ohne Weiteres schluckt und der Tomcat sich damit schwertut? Die Dependencies werden alle sauber aufgelöst. Ich könnte mir selbst nur 1. eine fehlende Bibliothek für Tomcat oder 2. eine zuviel aus den Obermodulen includierten, aber in Richtung JSF war da eigentlich keine mehr bei.

Abhilfe?


----------

