在每个servlet的基础上提供静态内容



我正在制作一个基于配置文件动态加载模块的应用程序。每个模块都有自己的servlet和自己的路径。

它是有效的,但到目前为止,它只提供我在类(rest服务)中用@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

知道吗?

不要重复使用名称"default",为每个模块创建一个新名称。

同样重要的是,使用资源库的完全限定路径,可以是完整的文件系统路径,也可以是绝对URL。

下面是一个来自嵌入式jetty食谱示例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/*");

最新更新