在undertow documentation site中列出的示例中,它显示了如何配置2个servlet及其映射。但我找不到如何配置默认 Servlet以允许目录列表和资源服务。
DeploymentInfo servletBuilder = Servlets.deployment()
.setClassLoader(ServletServer.class.getClassLoader())
.setContextPath("/myapp")
.setDeploymentName("test.war")
.addServlets(
Servlets.servlet("MessageServlet", MessageServlet.class)
.addInitParam("message", "Hello World")
.addMapping("/*"),
Servlets.servlet("MyServlet", MessageServlet.class)
.addInitParam("message", "MyServlet")
.addMapping("/myservlet"));
DeploymentManager manager = Servlets.defaultContainer().addDeployment(servletBuilder);
manager.deploy();
PathHandler path = Handlers.path(Handlers.redirect("/myapp"))
.addPrefixPath("/myapp", manager.start());
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path)
.build();
server.start();
它是一个可运行的jar中的嵌入式下载服务器。
答案 0 :(得分:1)
添加servlet时,还要在
的servlet列表中添加"默认" servletServlets.servlet("default", DefaultServlet.class)
.addInitParam(DefaultServlet.DIRECTORY_LISTING, "true")
.addInitParam(DefaultServlet.DEFAULT_ALLOWED, "true")
.addInitParam(DefaultServlet.ALLOW_POST, "false")
.addInitParam(DefaultServlet.RESOLVE_AGAINST_CONTEXT_ROOT, "true")
然后在部署容器之前将其添加到DeploymentInfo
servletBuilder.setResourceManager(new ClassPathResourceManager(App.class.getClassLoader(), "webapp"));
然后,您放入jar中打包的webapp文件夹中的任何内容都将与任何应用服务器中部署的任何普通war / webapp文件夹完全相同。
您可以使用任何名称或文件夹,webapp
只是一个例子。