在 grizzly 服务器中部署 war 个文件

Deploy war file in a grizzly server

我已经在这上面花了几天时间了,但我仍然没有找到答案(我确实找到了关于这个的问题)

我正在使用 java 编码,使用 grizzly 服务器(2.3 版本)并且我已经设法使用多种资源(restful 类、java servlet 等)。

    URI uri = new URI("http://localhost....");
    ResourceConfig rc = new ResourceConfig();
    rc.registerClasses(aResource.class);
    GrizzlyHttpServerFactory.createHttpServer(uri, rc);

不过,我的目标是加载整个 war 文件而不是单个 类,但我还没有找到实现它的方法。


所以问题是'how can i deploy and run a war file inside a grizzly server?'

根据 the Grizzly Javadoc 你是这样做的:

为 Servlet 提供服务的同步 Web 服务器

    GrizzlyWebServer ws = new GrizzlyWebServer("/var/www");
    try {
        ServletAdapter sa = new ServletAdapter();
        sa.setRootFolder("/Path/To/Exploded/War/File");
        sa.setServlet(new MyServlet());
        ws.addGrizzlyAdapter(sa);
        ws.start();
    } catch (IOException ex) {
        // Something when wrong.
    } 

但是,如您所见,您首先必须 "explode" WAR 文件;即解压到文件系统中。


您似乎在使用球衣 ResourceConfig class。为了使您的方法奏效,我认为您需要执行以下操作:

  1. 解压缩 WAR 文件。
  2. 创建一个 URLClassloader 实例,从“/WEB-INF/classes”加载“/WEB-INF/lib”中的 JAR 等。
  3. 通过调用ResourceConfig.setClassLoader
  4. 注册

郑重声明,class从打包的 WAR 文件中加载需要更多的精力,而且性能显然很差。 (如果您想了解如何操作,Tomcat 具有此功能...默认情况下禁用。)

目前无法将 WAR 文件部署到 Grizzly 2.x。