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>
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.
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.
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.
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 .
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.