web-dev-qa-db-fra.com

404 Erreur non trouvée dans une simple application Web Jetty/Maven Hello World

J'ai suivi les instructions pour créer une "application Web standard avec Jetty et Maven" précisément comme décrit sur le wiki Eclipse: http://wiki.Eclipse.org/Jetty/Tutorial/Jetty_and_Maven_HelloWorld#Developing_a_Standard_WebApp_with_Jetty_and_Maven

Cependant, lorsque je lance l'application Web (mvn jetty: run) et que je vais à localhost: 8080/hello-world/hello, je me retrouve à un "HTTP ERROR 404 Problème d'accès à/hello-world/hello. Reason: introuvable". J'ai parcouru la documentation, consulté l'historique de la page du wiki, parcouru d'autres forums et threads stackoverflow, mais je ne trouve pas la réponse à ce problème apparemment simple. Je posterai ma source, mais c'est littéralement la même chose que le tutoriel. 

Toute aide serait appréciée. J'aimerais vraiment commencer à jouer avec cette technologie, mais c'est décourageant de continuer à claquer dans la même impasse.

(Remarque: la première partie du didacticiel permettant de créer "JettyMavenHelloWorld" fonctionne correctement. Mon problème concerne la deuxième partie, "JettyMavenHelloWarApp". Cette section est intitulée "Développement d'une application Web standard avec Jetty et 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

Le didacticiel indique une URL incorrecte. Le contexte de votre application est toujours "/",so. Les URL sont respectivement http://localhost:8080 et http://localhost:8080/hello pour le contenu statique et dynamique.

La documentation du plug-in maven jetty affirme que le contexte par défaut portera le même nom que artifactId dans pom.xml, mais cela ne semble pas fonctionner ici.

11
GreyBeardedGeek

J'ai rencontré le même problème et ce qui a fonctionné pour moi était d'accéder à l'application comme: http://localhost:8080/hello/index.jsp ou http://localhost:8080/hello/index.html, que vous utilisiez des pages HTML ou js.

3
Cecilia Sachetti

Je pense que vous n'exécutez pas la tâche mvn package avant le mvn jetty:run, c'est pourquoi jetty ne voit aucune source. Il suffit de lancer mvn package en premier.

0
Evgeniy Kochetkov

J'ai eu le même problème avec une configuration de base.

Je voulais rediriger avec Spring 3 MVC une page d'erreur avec cette configuration (dans web.xml)

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

Je le résous en changeant l'extension de error.html en error.jsp .

0
Mesae

Je pense que l'ajout de configuration à la définition du plugin Jetty dans votre pom devrait changer le contextpath en hello-world:

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

Ceci est basé sur la version 9 de jetty. Voir http://wiki.Eclipse.org/Jetty/Feature/Jetty_Maven_Plugin pour les options de configuration.

0
Remco