【发布时间】:2015-11-29 10:19:11
【问题描述】:
我正在使用带有 Guice 的嵌入式 Jetty,并且想知道处理为我的单页应用程序提供服务的最佳方式。
我希望 Jetty 能够像这样处理请求(按优先顺序):
/socket必须由 websocket servlet 处理/fs/read/*,任何与此 url 匹配的内容都需要由自定义 servlet 处理-
/*,任何与此 url 匹配的内容都应该从 我的 Java 应用程序的类路径上的/web假设它不是 以上处理。如果资源不存在,则服务/web/index.html
现在我想知道处理这个问题的最佳方法是什么?使用 REST 框架似乎很笨拙,因为我真的没有任何休息服务。
这是我目前设置 Jetty 的方式:
ServletHolder servletHolder = new ServletHolder(DefaultServlet.class);
ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
servletContextHandler.addFilter(GuiceFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
servletContextHandler.addServlet(servletHolder, "/");
ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("/web"));
server.setHandler(resHandler);
这是我的 Guice ServletModule:
serve("/socket/*").with(WebSocketManagerServlet.class);
serve("/fs/read/*").with(MyCustomServlet.class);
但是,我不确定如何执行最后一条规则,它将任何与index.html 不匹配的内容重定向并且仍然让码头发送正确的标头,这些标头为css/js/html 等提供了正确的 mime 类型。码头也可能这样做我想维护一些内存映射和花哨的东西来快速提供这些服务。
【问题讨论】:
标签: java servlets jetty guice embedded-jetty