2

(我不小心删除了我在这个问题中提到的要点;很抱歉给您带来不便。)

问题

我正在尝试按照Jersey's user guide使用Servlet 3.0 API来部署 Jersey 根资源(那些带有@Path注释的资源)。

在 GitHub 上创建了一个包含两个类的要点:Foo.java这是通过其方法Application公开Bar.java(资源类)的子类。getClasses()(也有一个pom.xml,所以任何人都可以轻松地为自己/他自己尝试一下。)

但是,当我尝试将打包的战争部署到 Jetty 8.0.x 实例时,我在 pastebin 处获得了可用的输出

Foo.java被调用,它的getClasses()方法也被调用,而Bar.java从未被调用。

我可以在 到达 Jetty 的欢迎页面http://localhost:8080/,但是我无法到达http://localhost:8080/foohttp://localhost:8080/foo/bar。后两者导致以下错误:

未找到错误

自定义 404 页面

可能是什么问题呢?我在这里做错了吗?

答案

鉴于我使用的 WAR ( test-0.0.1-SNAPSHOT.war),我的应用程序路径变成http://localhost:8080/test-0.0.1-SNAPSHOT/foo/barhttp://localhost:8080/foo/bar. 看看我在那里做了什么?好的。把它铭刻在你的脑海中,否则会失去你生命中 3 到 5 个宝贵的时间!

4

3 回答 3

1

好的。我已经解决了这个问题。

我的应用程序路径不是 athttp://localhost:8080/foo/bar而是 at http://localhost:8080/<the name of my war file>foo/bar。因此,鉴于pom.xml我已发布它成为http://localhost:8080/test-0.0.1-SNAPSHOT/foo/bar.

我讨厌 WAR 文件。

于 2011-10-13T09:12:07.973 回答
0

您有一个调用@Path,而另一个调用@ApplicationPath并且方法上没有 @Path 。

你可以在这里

JAX-RS API(从 1.1.4 版开始)引入了一个特定的注释(@javax.ws.rs.ApplicationPath),它提供了 web.xml 配置的替代方案:

但是在被调用的方法上至少需要一个@Path。但是,最简单的可能是从经典的旧 web.xml 开始,然后在资源上使用 @Path。您将在网络上获得大量示例,而 @ApplicationPath 并不常见。

于 2011-10-13T08:00:15.750 回答
0

虽然这不是您的问题,但如果您尝试在 Cargo 的 Jetty 8 中进行部署,您可能会遇到此错误:http: //jira.codehaus.org/browse/CARGO-1133

于 2012-08-04T22:34:05.943 回答