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