GrizzlyWebServer + Spring + Jersey + обслуживать статический контент из JAR

Я пытаюсь развернуть REST API на основе Jersey-Spring, используя Grizzly com.sun.grizzly.http.embed.GrizzlyWebServer. Я также хочу обслуживать статический контент, используя то же самое. Вот что у меня есть:

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

«Адаптер Джерси» работает нормально, но я не могу получить статический контент, присутствующий в папке «webapp», для обслуживания (ошибка 404).

Структура папки моего проекта выглядит следующим образом:

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

Я ошибаюсь, указывая путь для «webapp» в строке new GrizzlyWebServer(host, port, "webapp", false); ??

Или есть ли другой способ обслуживать статический контент??


person codemaniac    schedule 21.08.2013    source источник


Ответы (1)


Вот пример того, как обслуживать ресурсы Jersey-Spring + статическое содержимое из папки и из файла jar, работающего поверх Grizzly2.

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

Код сервера выглядит так:

// 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();
}
person alexey    schedule 21.08.2013
comment
Спасибо Алексей. У меня есть вопрос об аутентификации при запросах статических ресурсов из банок, поэтому через CLStaticHttpHandler по сравнению со StaticHttpHandler. Это не доказано, но похоже, что аутентификация не применяется к первому, но применяется ко второму? Эта строка в WebappContext может объяснить это: if (!(h instanceof StaticHttpHandler)) (grizzly-http-servlet-2.3.17.jar). Мысли? Спасибо. - person user598656; 19.11.2014
comment
Ну, из того, что вы нашли, похоже, что могут быть некоторые проблемы. Можете пожалуйста. поделитесь тесткейсом на гитхабе - мне будет проще перепроверить. - person alexey; 20.11.2014