Почему Джерси не берет мою ПУТЬ и не дает мне 404? - PullRequest
0 голосов
/ 06 февраля 2012

Я разрабатываю простую услугу отдыха с использованием трикотажа и скалы, в основном для целей обучения. В настоящее время у меня настроено следующее

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 голосов
/ 08 февраля 2012

Ну, все эти проблемы, потому что я не знал, как работает причал: бег работал. Видите, плагин Jetty Maven запускает ваш сайт в контекстном приложении, которое соответствует идентификатору артефакта.

Что это означает простым языком, так это то, что если в вашем 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>

Это научит меня только просматривать документацию

...