问题 具有静态内容和REST资源的Grizzly Server


我有一个Jersey REST 2.5.1服务,通过Grizzly服务器提供服务。到目前为止一切正常。我想添加一些静态内容,这些内容也通过Grizzly提供,并从我的JAR文件中提供。所以我用 CLStaticHttpHandler。当我访问静态资源时,例如我的 index.html 明确地(例如 http://localhost:8080/index.html),一切正常。但是,当我尝试访问root时 http://localhost:8080,我得到一个404.代码看起来像这样:

ObjectMapper mapper = new ObjectMapper();
// some configuration stuff here

JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
provider.setMapper(mapper);

ResourceConfig resourceConfig = new ResourceConfig()
            .packages("my.restapi.package")
            .register(provider);

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), resourceConfig);
HttpHandler httpHandler = new CLStaticHttpHandler(HttpServer.class.getClassLoader(), "/static/");
httpServer.getServerConfiguration().addHttpHandler(httpHandler, "/");

据我调试,我可以告诉 org.glassfish.grizzly.http.server.CLStaticHttpHandler.handle(String, Request, Response) 永远不会被召唤。任何提示,我怎么能做到 index.html 可以作为默认页面访问


2941
2018-01-04 18:12


起源



答案:


经过一些浪费的时间后,我觉得现在有点愚蠢,但简单的解决方案是,指定一个路径 BASE_URI (http://localhost:8080/api/ 代替 http://localhost:8080/)。现在,访问时 /,我明白了 index.html 并且REST方法在 /api


9
2018-01-05 17:13



这也适用于罐子吗? - ynh
是的,这就是我使用它的方式。 - qqilihq
@qqilihq你在哪里放置静态文件夹? - Rentonie
在项目的类路径中(当时我正在使用maven项目,所以我放了 /static 在 src/main/resources)。 - qqilihq


答案:


经过一些浪费的时间后,我觉得现在有点愚蠢,但简单的解决方案是,指定一个路径 BASE_URI (http://localhost:8080/api/ 代替 http://localhost:8080/)。现在,访问时 /,我明白了 index.html 并且REST方法在 /api


9
2018-01-05 17:13



这也适用于罐子吗? - ynh
是的,这就是我使用它的方式。 - qqilihq
@qqilihq你在哪里放置静态文件夹? - Rentonie
在项目的类路径中(当时我正在使用maven项目,所以我放了 /static 在 src/main/resources)。 - qqilihq