2009-09-17 85 views
12

我正在嘗試使用Grizzly創建服務器來運行我使用Jersey開發的REST服務。我正在創建Grizzly服務器:在運行Jersey REST服務的Grizzly服務器中使用過濾器

final String baseUri = "http://localhost:9998/"; 
final Map<String, String> initParams = new HashMap<String, String>(); 
initParams.put("com.sun.jersey.config.property.packages", "me.my.rest.package"); 
SelectorThread threadSelector = 
    GrizzlyWebContainerFactory.create(baseUri, initParams); 

因爲我發現的所有例子都似乎暗示了。這很好,服務器啓動並能夠將傳入請求轉發給我的資源類。

但是,服務實現要求它使用servlet過濾器。看來Grizzly通過ServletAdapter類支持過濾器和其他類似servlet相關配置選項的定義。我的問題是,我無法確定如何使用提供Jersey集成的com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory來定義過濾器。

任何想法?

+0

最好的,我只是要問完全相同的問題。讓我知道如果學到什麼。我也會這樣做。 – ra9r 2009-09-24 07:48:02

回答

8

我想我可能有東西給你......

GrizzlyWebServer ws = new GrizzlyWebServer(9999); 
ServletAdapter jerseyServletAdapter = new ServletAdapter(); 
jerseyServletAdapter.setServletInstance(new ServletContainer()); 
jerseyServletAdapter.addInitParameter(
    "com.sun.jersey.config.property.packages", "me.my.rest.package"); 
jerseyServletAdapter.setServletPath("/api"); 

// HERE IS HOW YOU ADD A FILTER 
jerseyServletAdapter.addFilter(new MyFilter(), "HibernateSessionFilter", null); 

ws.addGrizzlyAdapter(jerseyServletAdapter, null); 

...它的工作對我來說,我希望它可以幫助你。

+1

謝謝!這正是我需要的。 – Andy 2009-09-24 11:44:22

+0

如何添加一個servlet上下文到這個方案,以便你可以通過@Context注入像HttpServletRequest這樣的東西到你的資源對象中? – ae6rt 2013-03-15 20:10:40

1

您是否嘗試過:

((ServletAdapter) threadSelector.getAdapter()).addFilter()