我在灰熊上運行新澤西州2.26-B09,和我使用下面的代碼來啓動灰熊HTTP服務器:新澤西+灰熊 - @ApplicationPath忽略
public void start() {
URI uri = UriBuilder.fromPath("").scheme("http").host("localhost").port(8084).path("/rest").build();
Map<String, String> params = new HashMap<>(16);
String applicationClassName = RestApplication.class.getName();
String applicationPackageName = RestApplication.class.getPackage().getName();
String productionPackageName = ProductionService.class.getPackage().getName();
params.put(ServletProperties.JAXRS_APPLICATION_CLASS, applicationClassName);
params.put(ServerProperties.PROVIDER_PACKAGES, productionPackageName + "," + applicationPackageName);
HttpServer server = GrizzlyWebContainerFactory.create(uri, params);
server.start();
}
的RestApplication類擴展應用,並有一個@ApplicationPath(「/ system」)註釋。 ProductionService類是一個帶有@Path(「/ production」)批註的REST資源。
我可以看到@ApplicationPath中指定的路徑被忽略:我的資源可以在/ rest/production而不是在/ rest/system/production上訪問。
我試圖將URI更改爲/休息/系統而不是/休息,但無濟於事:
URI uri = UriBuilder.fromPath("").scheme("http").host("localhost").port(8084).path("/rest/system").build();
的應用程序部署在根上下文/休息,不要/休息/系統。
我錯過了什麼?
當然,作爲一種解決方法,我可以將資源路徑從「/ production」更改爲「/ system/production」,但我想知道爲什麼應用程序路徑被忽略。
註解在ServletContainerInitializer中提取(主要在戰爭部署中)。我不知道灰熊是否支持這一點。也許你需要嘗試配置應用程序爲戰爭,並部署戰爭。我從來沒有試圖用灰熊的戰爭,所以我不知道如何配置它。但我知道初始化器不會像這樣通過編程配置來調用。 –
謝謝@peeskillet。我已經找到了一個關於如何用web應用程序配置grizzly的例子:https://stackoverflow.com/questions/22593983/using-jersey-with-grizzly?rq=1。我會給它一個機會。 –
不是這樣。這已經是'GrizzlyWebContainerFactory'正在做的事情了。我的意思是將你的項目打包成WAR,然後配置灰熊部署這場戰爭。 ApplicationPath實際上是用於自動發現的WAR部署,而不是用於嵌入式部署。沒有真正的需要。因爲你可以通過編程來配置URL。 –