启动Grizzly Web服务器的最佳方法是什么?

时间:2012-09-13 00:57:57

标签: java rest jersey grizzly

我们正在使用Grizzly和Jersey构建Web服务,并通过网络搜索来学习。我们注意到了两种不同的启动灰熊网络服务器的方式,但是没有看到一种方式是否优于另一种方式。有人可以帮忙吗?

1 - 使用GrizzlyWebContainerFactory:

 public static void main(String[] args) throws IOException {
 Map initParams = new HashMap();
 initParams.put( "com.sun.jersey.config.property.packages", "net.gilstraps.server" );
 SelectorThread selector = GrizzlyWebContainerFactory
 .create( "http://localhost:9998/", initParams ); //noinspection ResultOfMethodCallIgnored
 System.in.read();
 threadSelector.stopEndpoint();
 System.exit(0);
 }
}

2 - 使用GrizzlyWebServer

 GrizzlyWebServer gws = new GrizzlyWebServer(8080, "/var/www");

// Jersey web resources
 ServletAdapter jerseyAdapter = new ServletAdapter();
 jerseyAdapter.addInitParameter("com.sun.jersey.config.property.packages",
 "com.example");
 jerseyAdapter.setContextPath("/jersey");
 jerseyAdapter.setServletInstance(new ServletContainer());

// Another non-Jersey servlet
 ServletAdapter simpleServletAdapter = new ServletAdapter();
 simpleServletAdapter.setContextPath("/simple");
 simpleServletAdapter.setServletInstance(new SimpleServlet());

// register all above defined adapters
 gws.addGrizzlyAdapter(jerseyAdapter, new String[] {"/jersey"});
 gws.addGrizzlyAdapter(simpleServletAdapter, new String[] {"/simple"});

// let Grizzly run
 gws.start();

那么哪种方式更好?

由于  --Alex

2 个答案:

答案 0 :(得分:1)

起初我使用的是方法#1,但是一旦我需要提供更复杂的配置,我发现我需要方法#2才能访问GrizzlyWebServer对象。

例如,使用GrizzlyWebServer,您可以控制工作线程池的大小。 (我应该注意Grizzly docs只建议这样做是你有IO绑定的工作要做)。

grizzlyWebServer.setCoreThreads(30);
grizzlyWebServer.setMaxThreads(50);

我找不到用方法#1调整线程池大小的方法,因此我建议使用方法#2来改善可配置性。

答案 1 :(得分:0)

起初我使用方法#1,但是一旦我需要提供更复杂的配置,我发现我需要方法#2才能访问ServletAdapter对象。

例如,使用ServletAdapter,我们可以设置是否必须在启动时加载。

jerseyAdapter.setProperty("load-on-startup", 1);