2012-04-06 20 views
17

Sau khi tìm kiếm toàn bộ web và Stackoverflow, tôi vẫn đang cố gắng tìm ra cách tích hợp một giao diện kiểu RESTlet được cung cấp bởi Jersey với Jetty.Tích hợp Jetty với JAX-RS-Jersey

Tôi có máy chủ Jetty của mình và đang hoạt động và vì vậy Jersey có vẻ khá dễ sử dụng, có ai biết cách kết hợp cả hai với nhau không? Bất kỳ liên kết cụ thể nào cũng sẽ giúp ích - tôi cũng hơi mới để lập trình servlet.

Trả lời

26

Tôi đã tạo một ứng dụng bằng cách sử dụng Jetty và Jersey một lúc trở lại. Nó chỉ là một ứng dụng web tiêu chuẩn thực sự:

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> 

Một tài nguyên còn lại:

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"; 
    } 
} 

Jetty khởi động:

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> 

Hy vọng những đoạn mã này hướng bạn đi đúng hướng.

+1

Cảm ơn, đây là nhiều hơn hoặc ít hơn những gì tôi đang tìm kiếm - mặc dù tôi đã tóm tắt một số nội dung .xml vào mã Java - làm cho tôi làm việc với một điều ít hơn! – rmoh21

+0

bạn cũng sẽ cần ContextLoaderListener trong tệp tin web.xml và applicationContext.xml trong web-inf – iTake

+1

Tại sao bạn có phụ thuộc vào màu xám trong đó? – Stainedart

16

Bạn có thể muốn xem Dropwizard để tích hợp ngoài hộp giữa Jetty, Jersey, Jackson, Logback/Log4j/JUL/CJL và JDBI, tất cả được thiết kế tốt với Yammer Metrics.

+0

Liên kết bị hỏng. 15char – Navin

+1

Đã sửa lỗi ngay bây giờ, cảm ơn vì đã chú ý. – Cagatay