上下文webapp下面的Grizzly Static Content路径

时间:2017-07-17 17:59:24

标签: java servlets jersey grizzly

花了一天时间试图让Grizzly Static Content正常工作。 Grizzly博客的以下网址解释了很多:Grizzly STatic Content

我正在尝试模仿Tomcat,因为我将静态内容的路径放在webapp或上下文句柄之下。

public class SampleAdminApplication extends ResourceConfig {
    public SampleAdminApplication() {
        packages("com.companyname.sample.sampleadmin.server.services");
    }
}

public class SampleGrizzlyWebServer {
    public static void main(String[] args) throws IOException {
        try {
            HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
                URI.create("http://localhost:9090/Sample/"));

            /*--- Static Content ---*/
            String jarPath = getJarPath(SampleGrizzlyWebServer.class);
            CLStaticHttpHandler clStaticHttpHandler = new CLStaticHttpHandler(
                    new URLClassLoader(new URL[] {new File(jarPath).toURI().toURL()}),
                    "/", "/lib/", "/js/", "/css/");
            ServerConfiguration sc = httpServer.getServerConfiguration();
            sc.addHttpHandler(clStaticHttpHandler,"/SampleUI");

            /*--- SampleAdmin WebappContext ---*/
            WebappContext SampleAdminContext = new WebappContext("WebappContext", "/" + webapp + "/" + "SampleAdmin");

            /*--- Servlet ---*/
            final ResourceConfig sampleAdminRc = new SampleAdminApplication();
            ServletRegistration sampleAdminRegistration = SampleAdminContext.addServlet("ServletContainer", new ServletContainer(sampleAdminRc));
            sampleAdminRegistration.addMapping("/*");

            /**
             * Deploy Server
             */
            SampleAdminContext.deploy(httpServer);
            /**
             * Start Server
             */
            httpServer.start();
        } catch (Exception ex) {
            System.err.println("Error: " + ex.getMessage());
        }           
    }
} 

以上代码适用于以下网址:

http://localhost:9090/Sample/SampleAdmin/restmethod
http://localhost:9090/SampleUI/hello.htm

但是我希望静态页面低于webapp路径“Sample” 像:

http://localhost:9090/Sample/UI/hello.htm

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

嗯,我不知道我是否有任何徽章可以回答我自己的问题:) 我工作了几天,尝试从过滤器实现前进。此论坛上有多条关于球衣转发的未答复帖子。如何从过滤器转发不明显。 EndRant

我的解决方案是使用对HttpHandlerRegistration.builder()的弃用调用,这使我能够有效地设置/ Sample / UI上下文。

现在代码的行为类似于Tomcat,其中Sample / {SampleAdmin,UI}是端点。

self.Table = CreateTable(self.BaseStats, row, col, colHeaders, rowHeaders)
self.Table.dataSignal.connect(self.dataPlotter)
self.vboxRightBottom.addWidget(self.Table)