2017-07-17 3 views
0

Grizzly静的コンテンツを取得しようとして過ごしました。 Grizzly Blogの次のURLは、Grizzly STatic Content です。Grizzly静的コンテンツパスがコンテキストwebappの下にある

私は、静的コンテンツへのパスをwebappまたはコンテキストハンドルの下にするという点でTomcatを模倣しようとしています。

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()); 
     }   
    } 
} 

上記のコードは、次のURLので動作します。私は、Webアプリケーションのパス "サンプル" よう下回るように静的なページを希望しかし

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

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

どれでも助けに感謝します。

答えて

0

私は自分の質問に答えるためにバッジを取得するかどうかわかりません:) フィルタからフォワードを実装しようと数日間働いていました。ジャージーフォワーディングについてのこのフォーラムには未回答の複数の投稿があります。フィルタから転送する方法は明白ではありません。 EndRant

私の解決策は、HttpHandlerRegistration.builder()に対する廃止予定の呼び出しを使用して、/ Sample/UIコンテキストを効果的にセットアップできるようにすることでした。

ここで、コードはSample/{SampleAdmin、UI}がエンドポイントであるTomcatのように動作します。

startServer("http://", "localhost", "Sample", "UI", "9090"); 

    public static void startServer(String protocol, String host, String webapp, String ui, String port) { 
     try { 
      String BASE_URI = protocol + host + ":" + port + "/" + webapp + "/"; 

      HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI)); 

      /*--- Static UI Content ---*/ 
      if(ui!=null && !ui.equals("")) { 
       String jarPath = getJarPath(SampleGrizzlyWebServer.class); 
       if (jarPath != null) { 
        CLStaticHttpHandler clStaticHttpHandler = new CLStaticHttpHandler(
          new URLClassLoader(new URL[]{new File(jarPath).toURI().toURL()}), 
          "/", "/lib/", "/js/", "/css/"); 
        ServerConfiguration sc = httpServer.getServerConfiguration(); 
        sc.addHttpHandler(clStaticHttpHandler, HttpHandlerRegistration.builder().contextPath("/" + webapp + "/" + ui + "").urlPattern("").build()); 
       } 
      } 

      /*--- 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); 
      httpServer.start(); 

      System.out.println("Jersey app started with WADL available at:"); 
      System.out.println(BASE_URI + "SampleAdmin/application.wdl"); 
      System.out.println("Hit enter to stop it..."); 
      System.in.read(); 
      httpServer.shutdown(); 
     } 
     catch(Exception ex) { 
      System.err.println("Error: " + ex.getMessage()); 
     } 
    } 
関連する問題