2011-11-16 70 views
2

根據文檔http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty,我使用澤西島和嵌入式碼頭。迄今爲止,這工作得很好。我現在要添加的是在此配置中使用PostReplaceFilter。Jersey with embedded Jetty + PostReplaceFilter

通常這是在web.xml中做過這樣的

<init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
     <param-value>com.sun.jersey.api.container.filter.PostReplaceFilter</param-value> 
    </init-param> 

但使用的是嵌入式的Jetty我沒有web.xml中。我嘗試像這樣以編程方式設置過濾器

ServletContextHandler sch = new ServletContextHandler(server, "myapp"); 

    sch.setInitParameter("com.sun.jersey.spi.container.ContainerRequestFilters", "com.sun.jersey.api.container.filter.PostReplaceFilter"); 

但是這不顯示任何影響。任何人都可以闡明如何使用Java代碼安裝PostReplaceFilter?

在此先感謝


我看起來像我錯過了提一個重要的事實,這是我使用谷歌吉斯。因此沒有可以設置初始化參數的ServletHolder。相反,我終於可以在關於「初始化參數」部分的http://code.google.com/p/google-guice/wiki/ServletRegexKeyMapping的Guice文檔中找到答案。所以對於PostReplaceFilter這應該是這樣的:

Map<String, String> params = new HashMap<String, String>();     
params.put("com.sun.jersey.spi.container.ContainerRequestFilters", "com.sun.jersey.api.container.filter.PostReplaceFilter"); 
serve("/*").with(GuiceContainer.class, params); 

回答

1

你應該使用setInitParameter(),您使用註冊澤西servlet中ServletHolder實例設置。

+0

因爲我使用的是Guice,所以沒有ServletHolder可以設置這樣的init參數。不過謝謝你,因爲你的回答至少讓我在Guice與Jetty + Jersey的互動方式上有了進一步的發掘,所以我終於找到了解決方案。 – Ecthelion

+0

解決方案是什麼? –

+0

解決方案在問題結束時。 –