Eclipseを使用するのはこれが初めてで、私は多くの怒りを引き起こしています。
Tomcat 6.0をインストールし、Jerseyライブラリをダウンロードして、次のチュートリアルを実行しました。 http://www.vogella.com/articles/REST/article.html#first_client
私はRestExampleとしてプロジェクト名を作成し、その中にパッケージde.jay.jersey.firstがあり、その中にHelloWorldResourceクラスがあり、次のようになります。
package de.jay.jersey.first;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class HelloWorldResource {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Jersey" + "</title>"
+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}
}
そして私のweb.xmlは次のようになります
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>RestExample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>de.jay.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
と私はカールを次のように使用しようとしています:
curl http:// localhost:8081/RestExample/rest/hello
Apache Tomcat/6.0.35-エラーレポート
タイプ ステータスレポート
メッセージ/RestExample/rest/hello
説明 要求されたリソース(/ RestExample/rest/hello)は利用できません。
問題は、そのリソースにアクセスできるように、web.xmlで何を変更する必要があるかです。
RestExample/de.jay.jersey.first/rest/helloを試しましたが、それでも機能しませんでした。 Tomcatはエラーなしで実行されています。
私はTomcat 7.0でそれを試しました、そしてそれはうまく働きます:
package de.jay.jersey.first;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class HelloWorldResource {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Jersey" + "</title>"
+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
<display-name>RestExample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>de.jay.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
http:// localhost:8084/RestExample/rest/hello にアクセスすると、問題なく動作します
Web全体で解決策を探しているにもかかわらず、なぜうまくいかないのかを理解するのに長い時間がかかりました。私が犯した間違いは、パッケージ名が新しいジャージーAPIに対して最新のものではなかったことです。更新されたパッケージ名は次のようになります(Web.xml)。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
<display-name>RestExample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>de.jay.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
<servlet-class>
および<param-name>
はvogellaとは異なります(更新されます) tutorial 。この特定の質問に対する答えではないかもしれませんが、誰かを助けるかもしれません。 こちら から見つけました。
プロジェクトに指定されたすべてのjarを追加してください
プロジェクト(右クリック)>プロパティ> Javaビルドパス>ライブラリ> JARの追加/外部JARの追加
パスにこのバー「/」の例があるかどうかを確認してください:@Path( '/ path')場合によっては、この問題は足りないバーだけです!
私も何時間も同じ問題の解決策を探しました。
これは私の問題を解決しました:
maven-Project(たとえば、archetype maven-archetype-webapp)を使用し、クラスHelloWorldResourceがフォルダーに実装されている場合src/main/resourcesこのクラスはコンパイルされません(たとえば、次にEclipseで「mvn clean package」または「run on server」を実行)
HelloWorldResourceをフォルダーに実装src/main/Java代わりに404は発生しません。(maven-archetype-webappでMaven-Projectを作成する場合、フォルダーは手動で作成する必要があります)
代わりにJersey 2.XXユーザーServletAdaptorを使用している場合。このような、
<servlet-class>com.Sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
<!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> -->