2015-05-06 4 views
3

Я не могу получить комбинацию Jetty + servlet + Jersey. Вот мои шаги:Джерси @Path не работает в Jetty + servlet

1. pom.xml

<packaging>war</packaging> 
... 
<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <version>2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.17</version> 
    </dependency> 
</dependencies> 

2. web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="false" version="3.1"> 
    <servlet> 
    <servlet-name>org.example.MyApplication</servlet-name> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>org.example.MyApplication</servlet-name> 
    <url-pattern>/resources</url-pattern> 
    </servlet-mapping> 
</web-app> 

3. Источники

package org.example; 

import org.glassfish.jersey.server.ResourceConfig; 
import javax.ws.rs.ApplicationPath; 

@ApplicationPath("resources") 
public class MyApplication extends ResourceConfig { 
    public MyApplication() { 
     packages("org.example"); 
    } 
} 

package org.example; 

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

@Path("/") 
@Produces(MediaType.APPLICATION_JSON) 
public class MyResource { 
    @GET 
    public String get() { 
     return "{\"hello\": 1337}"; 
    } 
} 

Я развертываю WAR, созданный путем выполнения mvn clean compile package, скопировав его в каталог web-apps. Доступ к следующим URL возвращает мой жёстко прописанные JSON:

http://localhost:8080/test-1.0-SNAPSHOT/resources 
{"hello": 1337} 

Теперь я изменить @Path в моем ресурсе:

@Path("/bla") 
@Produces(MediaType.APPLICATION_JSON) 
public class MyResource { 
    @GET 
    public String get() { 
     return "{\"hello\": 1337}"; 
    } 
} 

Теперь ни один из следующих URL-адресов не похоже на работу:

http://localhost:8080/test-1.0-SNAPSHOT/resources/bla 
http://localhost:8080/test-1.0-SNAPSHOT/bla 
http://localhost:8080/test-1.0-SNAPSHOT/resources 
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla/ 
... 

Я пробовал несколько комбинаций, но я не могу заставить его работать.

+0

Привет, философия Jetty готова к установке webapp в порт. Таким образом, у вас будет webapp, упакованный как один JAR. Почему вы хотите hotdeploy, можете ли вы сказать нам, что именно вы хотите сделать, мне было бы легче помочь вам. Благодарю. – jeorfevre

+0

Я создам новый вопрос с более подробной информацией. –

+0

Не нужно создавать новый вопрос, просто отредактируйте его. –

ответ

3

Попробуйте добавить это в ваш web.xml. Это позволит сканировать пакет на джерси и сканировать ваш пакет org.example.

<servlet> 
     <servlet-name>Services</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value> 
       org.example 
      </param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Services</servlet-name> 
    <url-pattern>/resources/*</url-pattern> 
</servlet-mapping> 

Здесь вы можете увидеть полностью рабочий пример (определенный для tomcat), но я уже успешно портировал его на пристань.

https://github.com/DominikAngerer/java-GsonJerseyProvider/blob/master/WebContent/WEB-INF/web.xml

Здесь также немного самонастройки помощь - Он использует Джерси для API части с причалом - это также хороший учебник, который поможет вам много! https://github.com/amacoder/demo-restWS-spring-jersey-jpa2-hibernate

+0

Я получил его! Я уточню свой вопрос. Я не уверен, что это ожидаемое поведение или нет, но это кажется ошибкой для меня. Я объясню. –

+0

ok :) Рад слышать, что вы его запустили. – DominikAngerer

+0

Благодарим вас за вставку вашего web.xml. Перед редактированием у вас был '/ *' для 'url-pattern', поэтому я попробовал это. И это сработало. –

Смежные вопросы