花了一天时间试图让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
任何帮助都将不胜感激。
答案 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)