webentwicklung-frage-antwort-db.com.de

404 Fehler nicht gefunden in einer einfachen Anlegestelle/Maven Hallo World-Webapp

Ich habe die Anweisungen zum Erstellen einer "Standard WebApp mit Jetty und Maven" genau wie im Eclipse-Wiki beschrieben befolgt: http://wiki.Eclipse.org/Jetty/Tutorial/Jetty_and_Maven_HelloWorld#Developing_a_Standard_WebApp_with_Jetty_and_Maven

Wenn ich jedoch die webapp (mvn jetty: run) starte und zu localhost gehe: 8080/hallo-world/hallo lande ich bei einem "HTTP-Fehler 404 Problem beim Zugriff/hallo-world/hallo. Grund: nicht gefunden". Ich habe die Dokumentation durchgelesen, die Geschichte der Wiki-Seite durchgesehen, andere Foren und Stackoverflow-Threads durchforstet, aber keine Antwort auf dieses scheinbar einfache Problem gefunden. Ich werde meine Quelle posten, aber es ist buchstäblich dasselbe wie das Tutorial. 

Jede Hilfe wäre dankbar. Ich würde wirklich gerne anfangen, mit dieser Technologie herumzuspielen, aber es ist entmutigend, immer wieder in dieselbe Sackgasse zu geraten.

(Hinweis: Der erste Teil des Tutorials zum Erstellen von "JettyMavenHelloWorld" funktioniert einwandfrei. Mein Problem ist der zweite Teil "JettyMavenHelloWarApp". Dieser Abschnitt trägt den Titel "Entwickeln einer Standard-Webanwendung mit Jetty und Maven".)

JettyMavenHelloWarApp/pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>hello-world</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>Jetty HelloWorld</name>

  <properties>
    <jettyVersion>7.2.0.v20101020</jettyVersion>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.Eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jettyVersion}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <!-- This plugin is needed for the servlet example -->
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jettyVersion}</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution><goals><goal>Java</goal></goals></execution>
        </executions>
        <configuration>
          <mainClass>org.example.HelloWorld</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

JettyMavenHelloWarApp/src/main/Java/org/example/HelloServlet.Java

package org.example;

import Java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet
{
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setContentType("text/html");
        response.setStatus(HttpServletResponse.SC_OK);
        response.getWriter().println("<h1>Hello Servlet</h1>");
        response.getWriter().println("session=" + request.getSession(true).getId());
    }
}

JettyMavenHelloWarApp/src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
   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-app_2_5.xsd" 
   version="2.5">
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>org.example.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
  </servlet-mapping>
</web-app>

JettyMavenHelloWarApp/src/main/webapp/index.html

<h1>Hello World Webapp</h1>
<a href="/hello">Hello Servlet</a>
8
kburns

Das Tutorial gibt die falsche URL an - Ihr App-Kontext ist immer noch "/" ,[.____.". Also sind die URLs http://localhost:8080 und http://localhost:8080/hello für den statischen bzw. dynamischen Inhalt.

Die Dokumentation zum maven jetty plugin behauptet, dass der Standardkontext genauso benannt wird wie die artifactId in der pom.xml, aber das scheint hier nicht zu funktionieren.

11
GreyBeardedGeek

Ich stieß auf die gleiche Ausgabe und was für mich funktionierte, war der Zugriff auf die App wie: http://localhost:8080/hello/index.jsp oder http://localhost:8080/hello/index.html, was auch immer Sie HTML- oder Js-Seiten verwenden.

3

Ich denke, dass Sie nicht mvn package task vor mvn jetty:run ausführen, deshalb sieht Jetty keine Quellen. Führen Sie einfach zuerst mvn package aus.

0

Ich hatte das gleiche Problem mit einer Grundkonfiguration.

Ich wollte mit Spring 3 MVC eine Fehlerseite mit dieser Konfiguration umleiten (in web.xml)

<error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/views/error.html</location>
</error-page>

Ich löse es, indem ich die Erweiterung von error.html in error.jsp ändere.

0
Mesae

Ich denke, das Hinzufügen von Konfiguration zur Definition des Jetty-Plugins in Ihrem pom sollte den Kontextpfad in hallo-world ändern:

        <plugin>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jettyVersion}</version>
            <configuration>
                <webApp>
                    <contextPath>/hello-world</contextPath>
                </webApp>
            </configuration>
        </plugin>

Dies basiert auf der Jetty-Version 9. Weitere Informationen zu den Konfigurationsoptionen finden Sie unter http://wiki.Eclipse.org/Jetty/Feature/Jetty_Maven_Plugin .

0
Remco

Ihre Servlet-Zuordnung ist falsch oder unzureichend.

<url-pattern>/hello/*</url-pattern> // does not respond to "/hello"

Sie müssen eine Zuordnung für das URL-Muster "/ hello" hinzufügen.

<url-pattern>/hello</url-pattern>
0
Dermot Doherty