gpt4 book ai didi

java - 基于每个 servlet 提供静态内容

转载 作者:行者123 更新时间:2023-12-01 10:47:12 33 4
gpt4 key购买 nike

我正在制作一个根据配置文件动态加载模块的应用程序。每个模块都有自己的 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" );

但我不知道如何使用 jetty ServletHolder来做到这一点。

有什么想法吗?

最佳答案

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

使用资源库的完全限定路径(作为完整文件系统路径或绝对 URL)也很重要。

这是来自 embedded-jetty-cookbook 的示例名为 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/*");

关于java - 基于每个 servlet 提供静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100735/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com