# JSP-Seite kann nicht aufgerufen werden



## java007 (24. Jan 2011)

Hallo Zusammen,

ich arbeite an einem Tutorial in JSP/JSF, aber leider kann die erstellte JSP-Seite nicht aufgerufen werden. Bekomme diese Fehlermeldung:

HTTP Status 404 - /HelloWorldJSF/AddUser.jsf

--------------------------------------------------------------------------------

type Status report

message /HelloWorldJSF/AddUser.jsf

description The requested resource (/HelloWorldJSF/AddUser.jsf) is not available.


--------------------------------------------------------------------------------

Apache Tomcat/7.0.6

Den Code habe ich 1 zu 1 vom Tutorial übernommen und zwar folgendermaßen:


UserBean.java

```
package net.viralpatel.jsf.helloworld;

public class UserBean {
	 private int id;
	 private String name;
	 //Action method to add user
	 public String addUser() {
		 return "success";
		 }     
	 public int getId() {
		 return id;
		 }     
	 public void setId(int id) {
		 this.id = id;
		 }     
	 public String getName() {
		 return name;
		 }     
	 public void setName(String name) {
		 this.name = name;
		 } 
}
```


AddUser.jsp

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Add New User Form</title>
</head>
<body>
<f:view>
	<p><h:message id="errors" for="User_ID" style="color:red" /></p>
	<h:form>
		<h:panelGrid border="1" columns="2">
			<h:outputText value="ID">
			</h:outputText>
			<h:inputText id="User_ID" value="#{userBean.id}" required="true">
				<f:validateLongRange minimum="1" maximum="500" />
			</h:inputText>
			<h:outputText value="Name">
			</h:outputText>
			<h:inputText value="#{userBean.name}">
			</h:inputText>
			<h:commandButton action="#{userBean.addUser}" value="Add Customer">
			</h:commandButton>
		</h:panelGrid>
	</h:form>
</f:view>
</body>
</html>
```

ListUser.jsp

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>List of Users</title>
</head>
<body>
<f:view>
	<h:form>
		<h:outputText value="User #{userBean.name} is added successfully.">
		</h:outputText>
	</h:form>
</f:view>
</body>
</html>
```


faces-config.xml
[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_2_0.xsd"
    version="2.0">
	<managed-bean>
	<managed-bean-name>userBean</managed-bean-name>
	<managed-bean-class>net.viralpatel.jsf.helloworld.UserBean</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
	<navigation-rule>
		<display-name>AddUser</display-name>
		<from-view-id>/AddUser.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/ListUser.jsp</to-view-id>
		</navigation-case>
	</navigation-rule> </faces-config> 

[/XML]


Würde mich auf Tipps superfreuen.
mfg


----------



## maki (24. Jan 2011)

JSF ist kein Anfängerthema.. *verschoben*



> leider kann die erstellte JSP-Seite nicht aufgerufen werden.


Aha, Fehlermeldung? URL? Enthält letztere den Context?


----------



## SlaterB (24. Jan 2011)

web.xml vorhanden?
Developing Web Applications with JavaServer Faces


----------



## java007 (24. Jan 2011)

@Maik: ich habe jetzt die fehlermeldung hinzugefügt
@SlaterB: dankeschön für den link. web.xml ist vorhanden

web.xml
[JAVA=42]<?xml version="1.0" encoding="ASCII"?>
<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_3_0.xsd" version="3.0">
  <display-name>HelloWorldJSF</display-name>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>       //Servlet rot unterstrichen

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>   //Servlet rot unterstrichen

    <url-pattern>*.jsf</url-pattern>                      // in dieser Zeile ist *.jsf rotunterstrichen
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>
[/code]

dankeschön für die schnellen antworten


----------



## maki (24. Jan 2011)

Da du niczt sagst wie du die WebApp deployest, kann man da nur raten, aber ich würde mal HelloWorldJSF aus der URL weglassen, manche IDEs deployen default auf dem Rootkontext.

Gibt es Fehlermeldungen im Log/Konsole?


----------



## java007 (24. Jan 2011)

Also ich versuche die Seite zu Starten in dem ich auf den Project-Folder gehe, dann rechtsclick --> option run on server. 
So beginnt die Fehlermeldung:

24.01.2011 14:20:40 org.apache.catalina.startup.SetContextPropertiesRule begin
WARNUNG: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:HelloWorldJSF' did not find a matching property.
24.01.2011 14:20:40 org.apache.catalina.startup.HostConfig deployDescriptor
SCHWERWIEGEND: Error deploying configuration descriptor HelloWorldJSF.xml
java.lang.NoClassDefFoundError: javax/servlet/ServletContainerInitializer
	at java.lang.ClassLoader.findBootstrapClass(Native Method)
	at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:927)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:298)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
....


----------



## maki (24. Jan 2011)

Apache Tomcat - Which Version Do I Want?

ServletContainerInitializer gibt es erst seit Servlet Spek 3.0, nur Tomcat 7 unterstützt das, welchen hast du am laufen?


----------



## SlaterB (24. Jan 2011)

du hast schwere Fehler beim Deployen die jede Wette, dass nix läuft, alt aussehen lassen
und schreibst dann anfangs dass eine bestimmte URL nicht gefunden wird?!

NoClassDefFoundError klingt nach zu wenig Libraries im lib-Verzeichnis des WebServers, dahingehend etwas im Tutorial gelesen?


----------



## java007 (24. Jan 2011)

@maki: ich benutze Apache Tomcat/7.0.6 also die aktuelle version
@SlaterB: ich habe von JSTL bis JSF 2.0 (Mojarra 2.0.3-FCS) die Bücherrei aufgefüllt 

ich denke web.xml ist nicht in Ordnung. Ich habe drei Zeilen des web.xml's mit Hilfe comments hervorgehoben, die bei mir rot unterstrichen werden. der einstieg in jsp jsf ist ja echt eine Qual


----------



## maki (24. Jan 2011)

[c]servlet-name[/c] ist kein Feld für einen beliebigen Text welcher Leerzeichen enthalten darf oder gar mehrfach vorkommen, sondern eine ID die fürs Mapping verwendet wird.


----------



## SlaterB (24. Jan 2011)

Leerzeichen-Beispiele findet man aber im Internet, gerade 'Faces Servlet',
und dass es beim Mapping wiederverwendet wird ist ja gerade der Sinn der Definition? ("eine ID die fürs Mapping verwendet wird"),
ohne Leerzeichen zu testen kann aber gewiss nicht schaden,

gibts bei rot unterstrichen keine Fehlermeldungen am Rand? XML-Validierung ist aber auch nicht immer fatal,
wenn die Entwicklungsumgebung was nicht kennt, kommt der Web-Server vielleicht trotzdem damit zurecht


----------



## maki (24. Jan 2011)

SlaterB hat gesagt.:


> Leerzeichen-Beispiele findet man aber im Internet, gerade 'Faces Servlet',
> und dass es beim Mapping wiederverwendet wird ist ja gerade der Sinn der Definition? ("eine ID die fürs Mapping verwendet wird"),
> ohne Leerzeichen zu testen kann aber gewiss nicht schaden,


Hast Recht, Leerzeichen scheinen OK zu sein, aber eindeutig muss der servlet-name schon sein laut XSD.

[xml]    <xsd:unique name="web-common-servlet-name-uniqueness">
      <xsd:annotation>
        <xsd:documentation>

          The servlet element contains the name of a servlet.
          The name must be unique within the web application.

        </xsd:documentation>
      </xsd:annotation>
      <xsd:selector xpath="javaee:servlet"/>
      <xsd:field xpath="javaee:servlet-name"/>
    </xsd:unique>[/xml]


----------



## java007 (24. Jan 2011)

ich habe eben nochmal nachgesehen, und zwar keine direkte fehlermeldung sondern folgendes "The word 'Servlet' is not correctly spelled" und "The word 'jsf' is not correctly spelled" ich habe den eindruck dass für mich und zwar für den einstieg eine sehr große recherche-arbeit bevorsteht ;( könnt ihr mir vielleicht referenzen nennen die in dem gebiet essentziel sind?
Vielen Dank


----------



## SlaterB (24. Jan 2011)

@maki
auch wenn die Nebendiskussion wenig bringt:
eindeutig ist er auch, nur in Zeile 45 ist ein Servlet definiert, in Zeile 51 dann ein Mapping dazu

@java007
ich wäre dafür, die fehlenden Libraries zur Verfügung zu stellen,
j2ee.jar usw.,
siehe auch
Application Developer's Guide (7.0.6) - Deployment



die zuletzt genannten Fehlermeldungen klingen nach Rechtschreibprüfung, egal


----------



## java007 (25. Jan 2011)

mit Tomcat 6.0, JavaServerFaces v1.2 Project und jstl_1.2 hat es nun funktioniert 
dagegen mit Tomcat 7.0, JavaServerFaces v2.0 Project und jstl_1.2 nicht, verwirrt mich irgendwie
mfg


----------

