Ich weiß der Titel sieht aus wie viele Leute haben diese Frage schon einmal gestellt, aber ich habe eine Menge Forschung und konnte keine Lösung finden, löst meine Problem. Ich habe zwei Tage mit diesem Thema verbracht, also bitte hilf mir!Eclipse, Maven, Jersey REST Service, Servlet 3.0, Tomcat 7.0, HTTP 404 Fehler
Ich versuche, eine einfache "Hallo Welt" Art von erholsamen Web-Service mit Eclipse Kepler Service Release 2, Jersey, Eclipse integrierten Maven, Servlet 3.0 und Tomcat 7.0 zu bauen. Wenn ich meinen Dienst mit "Ausführen als" -> "Auf Server ausführen" ausführe, gibt es kein Problem beim Laden der Standardseite "index.jsp", aber beim Laden meines Dienstes bekomme ich immer wieder den HTTP 404-Fehler.
This image shows my project layout.
Meine Klasse, die Anwendung implementiert ist wie folgt aus:
package com.ys.java.ws;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import com.ys.java.ws.resources.MyService;
@ApplicationPath("/ys")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(MyService.class);
return s;
}
}
Meine Ressourcenklasse ist:
package com.ys.java.ws.resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/test")
public class MyService {
public MyService() {
}
@GET
@Path("/hello")
//@Produces(MediaType.TEXT_PLAIN)
@Produces("text/html")
public String getTestMsg() {
return "It works";
}
}
Meine pom.xml Datei ist:
<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>com.ys.java.ws</groupId>
<artifactId>ysNoWebXML</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ysNoWebXML Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Servlet 3.0 API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<!--JAX-rs web service API -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
<build>
<finalName>TestService</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Mein web.xml ist:
<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_3_0.xsd"
version="3.0">
<display-name>Servlet 3.0 Web Application</display-name>
<servlet>
<servlet-name>com.ys.java.ws.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>com.ys.java.ws.MyApplication</servlet-name>
<url-pattern>/rest</url-pattern>
</servlet-mapping>
</web-app>
Beachten Sie, dass: in MyApplication Klasse, habe ich @ApplicationPath("/ys")
und in web.xml stelle ich <url-pattern>/rest</url-pattern>
. Ich tue dies intensional da nach jax-rs document,
If both the <servlet-mapping> and @ApplicationPath are specified, the <servlet-mapping> takes precedence.
Ich möchte testen, ob dies der Fall ist, aber egal, welchen Weg ich, erhalte ich HTTP 404 Fehler. Hier
Ich sehe nicht, welche URL Sie verwenden den Test Zugriff auf Ihre laufenden Anwendung zu tun. –
Ich habe nicht genug Punkte, um mehr als 2 URLs hinzuzufügen. Also ... habe ich Folgendes getestet: http: // localhost: 8080/TestService/rest/test/Hallo ---- get 404, http: // localhost: 8080/TestService/ys/test/hallo --- get 404, http: // localhost: 8080/TestService --- funktioniert, lädt default index.jsp – user2573741
Kann jemand helfen? – user2573741