2014-03-03 67 views
3

我正在尋找使用嵌入式碼頭和澤西島在Java中編寫獨立的REST應用程序。碼頭上無描述符的澤西島9

澤西文件表明,在Servlet 3.0容器,澤西應該能夠無需網絡描述符文件或代碼自動註冊的Web應用程序:https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3

不過,我懷疑我是正確遇事新澤西調用以正確的方式(或全部):

 ServletHandler handler = new ServletHandler(); 

     Server server = new Server(8080); 
     server.setHandler(handler); 

     server.start(); 
     server.join(); 

我已經嘗試了一些其他的東西,但大多數其他的例子似乎是試圖解決其他問題。

的我想要實現

完整的示例代碼是在這裏: https://github.com/dowlingw/jax-rs-plzhalp

(無關:我已經使用DropWizard考慮,但不希望具備的一切)

乾杯:)

回答

4

這裏有一個簡單的例子

服務器:

package com.mayapp.app; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 
import org.glassfish.jersey.server.ServerProperties; 
import org.glassfish.jersey.servlet.ServletContainer; 

/** 
* Hello world! 
*/ 
public class App { 
    public static void main(String[] args) { 
      Server server = new Server(8112); 
      ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
      context.setContextPath("/"); 
      server.setHandler(context); 
      ServletHolder h = new ServletHolder(new ServletContainer()); 
      h.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.myapp.resources"); 
      h.setInitOrder(1); 
      context.addServlet(h, "/*"); 
      server.setDumpAfterStart(true); 
      try { 
       server.start(); 
      }catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 

} 

和資源:

package com.myapp.resources; 

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

@Path("hello") 
public class HelloWorldResource { 
    @GET 
    @Produces("text/plain") 
    public String getHello() { 
     return "hello world"; 
    } 

} 
+0

也把源頭放在github上:https://github.com/aakture/helloworld/ –

+0

謝謝 - 這似乎工作...我可以發誓我之前試過,但顯然不是! 它沒有註冊我的@ApplicationPath註釋的基本應用程序,但正在挑選單獨的控制器,這對我來說工作得很好。 Cheers :) – heretik

+0

好極了,如果你喜歡Guice,這是一個方便的方式來執行澤西島的依賴注入。 [這些傢伙](http://blog.palominolabs.com/2011/08/15/a-simple-java-web-stack-with-guice-jetty-jersey-and-jackson/)就是一個很好的例子。 –

0

你需要傳遞一些球衣相關成ServletHandler,通常org.glassfish.jersey.servlet.ServletContainer:

org.glassfish.jersey.server.ResourceConfig resourceConfig = ... 
    org.glassfish.jersey.servlet.ServletContainer servletContainer = new ServletContainer(resourceConfig); 
    org.eclipse.jetty.servlet.ServletHolder servletHolder = new ServletHolder(servletContainer); 

    org.eclipse.jetty.servlet.ServletHandler handler = new ServletHandler(); 
    handler.addServlet(servletHolder); 

    org.eclipse.jetty.server.Server server = new Server(8080); 
    server.setHandler(handler); 

ResourceConfig提供了許多構造函數和靜態工廠,它們允許您從JAX-RS應用程序創建一個ResourceConfig實例,或者通過指定一組包來掃描JAX-RS組件。

+0

是'型的'那情景ServletHandler' org.eclipse.jetty.servlet.ServletHandler '? 我已經嘗試過,但與我已包含的依賴關係我沒有看到構造函數作爲選項:/ – heretik

+0

我的不好,我會編輯答案來包含可編譯的代碼。 –