2013-08-21 21 views
5

Grizzlyのcom.sun.grizzly.http.embed.GrizzlyWebServerを使用してJersey-SpringベースのREST APIをデプロイしようとしています。私は同じものを使って静的なコンテンツを提供したい。ここで私が持っているものです。GrizzlyWebServer + Spring + Jersey +静的コンテンツをJAR内から配信

String host = "localhost"; 
int port = 8081; 

// For jersey + Spring 
ServletAdapter jAdapter = new ServletAdapter("jersey"); 
jAdapter.setContextPath("/api");   
jAdapter.setServletInstance(new SpringServlet()); 
jAdapter.addContextParameter("contextConfigLocation", "classpath:spring-context.xml"); 
jAdapter.addServletListener("org.springframework.web.context.ContextLoaderListener"); 
jAdapter.addServletListener("org.springframework.web.context.request.RequestContextListener");    

// create GrizzlyWebServer 
GrizzlyWebServer grizzlyServer = new GrizzlyWebServer(host, port, "webapp", false); 

// add jersey adapter 
grizzlyServer.addGrizzlyAdapter(jAdapter, new String[]{"/api"}); 

// start server 
grizzlyServer.start(); 

System.out.println("Start running server(host: " + host + ",port: " + Integer.toString(port)); 
System.out.println("Press any key to stop the server."); 

// hang on 
System.in.read(); 

// stop 
grizzlyServer.stop(); 

「ジャージー・アダプターは、」正常に動作しますが、私は(404エラー)提供する「Webアプリケーション」フォルダに存在する静的なコンテンツを取得することはできませんよ。

次のように私のプロジェクトのフォルダ構造は次のとおりです。

GrizzlyTest 
    -- src 
    | | 
    | -- main 
    |  | 
    |  -- java 
    |  -- resources 
    |  | 
    |  -- webapp 
    |  | | 
    |  | -- index.html 
    |  -- spring-context.xml 
    | 
    -- pom.xml 

私はラインnew GrizzlyWebServer(host, port, "webapp", false);で「Webアプリケーション」のパスを提供することでミスを作っています?

静的コンテンツを配信する方法はありますか?

答えて

7

ここでは、Jersey-Springリソース+静的コンテンツをフォルダやGrizzly2上で動作するjarファイルから提供する方法のサンプルを示します。

// Initialize Grizzly HttpServer 
HttpServer server = new HttpServer(); 
NetworkListener listener = new NetworkListener("grizzly2", "localhost", 3388); 
server.addListener(listener); 

// Initialize and add Spring-aware Jersey resource 
WebappContext ctx = new WebappContext("ctx", "/api"); 
final ServletRegistration reg = ctx.addServlet("spring", new SpringServlet()); 
reg.addMapping("/*"); 
ctx.addContextInitParameter("contextConfigLocation", "classpath:spring-context.xml"); 
ctx.addListener("org.springframework.web.context.ContextLoaderListener"); 
ctx.addListener("org.springframework.web.context.request.RequestContextListener"); 
ctx.deploy(server); 

// Add the StaticHttpHandler to serve static resources from the static1 folder 
server.getServerConfiguration().addHttpHandler(
     new StaticHttpHandler("src/main/resources/webapp/static1/"), "/static"); 

// Add the CLStaticHttpHandler to serve static resources located at 
// the static2 folder from the jar file jersey1-grizzly2-spring-1.0-SNAPSHOT.jar 
server.getServerConfiguration().addHttpHandler(
     new CLStaticHttpHandler(new URLClassLoader(new URL[] { 
      new File("target/jersey1-grizzly2-spring-1.0-SNAPSHOT.jar").toURI().toURL()}), "webapp/static2/"), 
     "/jarstatic"); 

try { 
    server.start(); 

    System.out.println("In order to test the server please try the following urls:"); 
    System.out.println("http://localhost:3388/api to see the default TestResource.getIt() resource"); 
    System.out.println("http://localhost:3388/api/test to see the TestResource.test() resource"); 
    System.out.println("http://localhost:3388/api/test2 to see the TestResource.test2() resource"); 
    System.out.println("http://localhost:3388/static/ to see the index.html from the webapp/static1 folder"); 
    System.out.println("http://localhost:3388/jarstatic/ to see the index.html from the webapp/static2 folder served from the jar file"); 

    System.out.println(); 
    System.out.println("Press enter to stop the server..."); 
    System.in.read(); 
} finally { 
    server.shutdownNow(); 
} 
+0

おかげアレクセイ:

https://github.com/oleksiys/samples/tree/master/jersey1-grizzly2-spring

サーバーのコードは次のようになります。私はJStarsから静的リソースの要求に対する認証について質問します。そのため、CLStaticHttpHandlerとStaticHttpHandlerを使用します。これは証明されていませんが、認証は前者には適用されませんが後者に適用されるように見えますか? 'WebappContext'のこの行は' if(!(h instanceof StaticHttpHandler)) '(grizzly-http-servlet-2.3.17.jar)を説明しています。思考?ありがとう。 – user598656

+0

あなたが見つけたものから、いくつか問題があるように見えます。あなたはplsできますか?テストケースをgithubで共有してください。ダブルチェックするのが簡単になります。 – alexey

関連する問題