我正在制作一个根据配置文件动态加载模块的应用程序。每个模块都有自己的servlet和自己的路径。
它有效,但到目前为止它只提供我在我的课程中使用@Path
注释的内容(休息服务),这要归功于ServerProperties.PROVIDER_PACKAGES
属性:
上下文:
ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS );
context.setContextPath( "/" );
每个模块/ servlet都是这样初始化的:
ServletHolder jerseyServlet = context.addServlet( org.glassfish.jersey.servlet.ServletContainer.class, "/" );
jerseyServlet.setInitOrder( 0 );
jerseyServlet.setInitParameter( ServerProperties.PROVIDER_PACKAGES, "com.my.packages.rest.server.root" );
这为每个模块提供了一个url路径 - 很棒。
但是我在每个模块的resource / modulename文件夹中也有一些静态html,我不知道如何服务......
使用DefaultServlet,我可以这样做:
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder staticAppServlet = new ServletHolder( "default", defaultServlet );
staticAppServlet.setInitParameter( "resourceBase", "./src/main/resources/modulename/" );
context.addServlet( staticAppServlet, "/path" );
但我不知道怎么用码头ServletHolder
来做这件事。
有什么想法吗?
答案 0 :(得分:1)
不要重复使用名称"默认",为每个模块创建一个新名称。
使用资源库的完全限定路径也很重要,可以是完整文件系统路径,也可以是绝对URL。
的DefaultServletMultipleBases.java
示例中的示例
// add special pathspec of "/alt/" content mapped to the altPath
ServletHolder holderAlt = new ServletHolder("static-alt", DefaultServlet.class);
holderAlt.setInitParameter("resourceBase",altPath.toUri().toASCIIString());
holderAlt.setInitParameter("dirAllowed","true");
holderAlt.setInitParameter("pathInfoOnly","true");
context.addServlet(holderAlt,"/alt/*");