为什么球衣不拿起我的PATH给我404?

时间:2012-02-06 19:52:32

标签: scala maven jetty jersey

我正在开发一种带有球衣和scala的简单休息服务,主要用于学习目的。我目前有以下配置

package org.michaelangelomanager.restservice.rest

import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType

@Path("/drawing")
class DrawingResource {

  @GET
  @Produces(Array(MediaType.TEXT_PLAIN))
  def someText() = {
    "Some text" 
  }
}

我的web.xml看起来像这样

<display-name>org.michaelangelomanager.restservice</display-name>

<servlet>
    <servlet-name>MichaelAngeloManager</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>org.michaelangelomanager.restservice.rest</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
        <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>MichaelAngeloManager</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

然后,当我做一个mvn jetty:在控制台中运行时,我得到以下输出

[INFO] Starting jetty 6.1.26 ...
2012-02-06 14:46:26.149:INFO::jetty-6.1.26
2012-02-06 14:46:26.296:INFO::No Transaction manager found - if your webapp requires one, please configure one.
6 fevr. 2012 14:46:26 com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  org.michaelangelomanager.restservice.rest
6 fevr. 2012 14:46:26 com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class org.michaelangelomanager.restservice.rest.DrawingResource
6 fevr. 2012 14:46:26 com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
6 fevr. 2012 14:46:26 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.11 12/09/2011 10:27 AM'
2012-02-06 14:46:27.206:INFO::Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server

显然我的根被拾起了。但随后我打开浏览器前往http://localhost:8080/drawing,我得到了404。

我在这里缺少什么?我找到的每个例子都不需要更多。

1 个答案:

答案 0 :(得分:0)

嗯,这一切都很麻烦,因为我真的不知道码头如何运行。请参阅,jetty maven插件在与工件ID对应的上下文应用程序下运行您的站点。

用简单语言表示的是,如果在你的pom.xml中,你有

<artifactId>myfabulousapp</artifactId>

您将使用http://localhost:8080/myfabulousapp访问您的应用,而不是像我之前所假设的那样访问http://localhost:8080

为了防止这种情况,只需像这样配置插件

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.26</version>
    <configuration>
        <!-- THAT LINE -->
        <contextPath>/</contextPath>
    </configuration>
</plugin>

这将教会我只浏览文档