【发布时间】:2021-08-31 10:29:06
【问题描述】:
我有一个在其他项目中使用的共享 Java OSGi 包。这个我的共享库需要一些配置,其他项目必须通过 servlet 上下文初始化参数来配置它。
目前我的 JSP/Servlet、Spring/SpringBoot、Struts 用户可以在 web.xml 或 @SpringBootApplication 中设置所需的配置,如下所示:
JSP/Servlet、Spring、Struts 应用:
// web.xml
<init-param>
<param-name>my_config</param-name>
<param-value>value</param-value>
</init-param>
SpringBoot 应用:
@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer {
@Bean
public ServletContextInitializer initializer() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("my_config", "value");
}
};
}
}
现在,我正在尝试使我的共享库在 Apache Sling 上工作,但我不知道如何在 Apache Sling 中设置 servlet init 参数。我只是 Apache Sling 的新手。
【问题讨论】:
-
你能告诉我们一点,你想达到什么?也许 SlingServlet 不是正确的答案。由于 Sling 构建在 OSGi (Apache Felix) 之上,因此您还可以通过 OSGi 白板模式集成一个 Servlet。甚至可以与底层的 Servlet Container (Jetty) 集成。但当然你也可以做一个 SlingServlet,然后配置将基于 OSGi。
-
PS:当您使用 SpringBoot 示例时,我假设您可能对互操作性更感兴趣,而不是 SlingServlet 的细节。实际上 Sling 本身主要是一个大的 servlet,它根据内容和配置进行大量的 URL 路由。那么您的 SlingServlet 只是 Sling 可以用来满足请求的众多端点之一。 SlingServlet 是一个 OSGi 组件,由 Sling 使用 - 它不直接连接到 Servlet-Container。它还具有某种兼容/相似但不同的 API。