Интеграция Jetty с JAX-RS-Джерси

17

После исчерпывающего поиска в Интернете и Stackoverflow я все еще пытаюсь понять, как интегрировать интерфейс стиля RESTlet, предоставленный Джерси с Jetty.

У меня есть мой сервер Jetty и работает, и, поскольку такой Джерси кажется довольно простым в использовании, кто-нибудь знает, как связать их вместе? Любые конкретные ссылки помогут - я немного новичок в программировании сервлетов.

    
задан rmoh21 06.04.2012 в 21:02
источник

2 ответа

26

Я создал приложение, использующее Jetty и Jersey некоторое время назад. На самом деле это просто стандартный webapp:

web.xml:

<servlet>
    <servlet-name>rest.service</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
        <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>your.package.with.jersey.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest.service</servlet-name>
    <url-pattern>/service/*</url-pattern>
</servlet-mapping>

Ресурс отдыха:

package your.package.with.jersey.resources;

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

@Path("login")
public class LoginResource {

    @Context
    private SecurityContext security;

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public String login() {

        String email = security.getUserPrincipal().getName();
        return "ok";
    }
}

Причал:

public class StartJetty {

    public static void main(String[] args) throws Exception {

        Server server = new Server();
        SocketConnector connector = new SocketConnector();
        // Set some timeout options to make debugging easier.
        connector.setMaxIdleTime(1000 * 60 * 60);
        connector.setSoLingerTime(-1);
        connector.setPort(8080);
        server.setConnectors(new Connector[] { connector });

        WebAppContext bb = new WebAppContext();
        bb.setServer(server);
        bb.setContextPath("/");
        bb.setWar("src/main/webapp");

        server.addHandler(bb);

        try {
            System.out.println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP");
            server.start();
            while (System.in.available() == 0) {
                Thread.sleep(5000);
            }
            server.stop();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(100);
        }
    }
}

pom.xml:

<!-- Jetty -->
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
</dependency>
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
</dependency>
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-management</artifactId>
</dependency>

<!-- Jersey (JAX-RS) -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-spring</artifactId>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-test-framework</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.sun.grizzly</groupId>
    <artifactId>grizzly-servlet-webserver</artifactId>
</dependency>

(...)

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>     
</plugin>

Надеюсь, что эти фрагменты указывают вам в правильном направлении.     

ответ дан Adriaan Koster 06.04.2012 в 23:24
источник
  • Спасибо, это более или менее то, что я искал - хотя я отвлек часть XML-кода на Java-код - заставляет меня работать с одной минутой! –  rmoh21 09.04.2012 в 23:56
  • вам также понадобится ContextLoaderListener в web.xml и applicationContext.xml в web-inf –  iTake 18.12.2012 в 17:43
  • Почему у вас есть зависимость от гризли? –  Stainedart 10.05.2013 в 20:20
  • @ Хороший вопрос. Любой из двух вариантов: 1) Я выяснил, что это сработало при добавлении этой зависимости по какой-то причине, которую я забыл. 2) Я скопировал вложенные зависимости и не потрудился проверить их. Если вы обнаружите, что это отлично работает без гризли, сообщите нам об этом. –  Adriaan Koster 11.05.2013 в 20:18
  • Спасибо. @ pk11 вы не разделяете то, что вы извлекли из web.xml в java. Мне интересно, потому что в настоящее время мой сервер не загружает ресурс jersey, и я не могу найти причину, за исключением того, что web.xml не загружен должным образом. Я предпочел бы это с помощью java, было бы проще порт. –  Stainedart 15.05.2013 в 16:30
16

Возможно, вам стоит взглянуть на Dropwizard для интеграции из Jetty, Jersey, Jackson, Logback / Log4j / JUL / CJL и JDBI, все хорошо оснащены инструментами Yammer Metrics.

    
ответ дан Cagatay 01.06.2012 в 17:00
источник
  • Неработающая ссылка. 15char –  Navin 05.01.2016 в 07:15
  • Исправлено это сейчас, спасибо, что заметили. –  Cagatay 07.01.2016 в 05:32