【问题标题】:How to define default welcome page in an equinox OSGI server?如何在 Equinox OSGI 服务器中定义默认欢迎页面?
【发布时间】:2013-08-03 19:18:59
【问题描述】:

我们正在使用 OSGI Equinox “org.eclipse.equinox.http.registry.resources”扩展来定义在我们的 OSGI Equinox 服务器的不同 JAR 中可访问的资源。它们中的大多数只是指向静态 HTML 内容,因此没有 Servlet 实现。我想知道为子文件夹定义默认页面的最简单方法是什么(定义通常在标准 Servlet 包装中的 web.xml 中定义的“欢迎”文件)。基本上,我在 /mynewresource 中定义了一个资源,并在用户进入时将其链接到 index.html,而不是出现服务器错误。

【问题讨论】:

    标签: java servlets osgi


    【解决方案1】:

    如果您只想在资源上具有转到 index.html 的默认行为,您可以创建那个简单的过滤器:

    public class WelcomFilter implements javax.servlet.Filter {
    
    /** {@inheritDoc} */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    }
    
    /** {@inheritDoc} */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {
            HttpServletRequest r = (HttpServletRequest) request;
            if ("/".equals(r.getPathInfo())) {
                r.getRequestDispatcher("index.html").forward(request, response);
            } else {
                chain.doFilter(request, response);
            }
        } else {
            chain.doFilter(request, response);
        }
    }
    
    /** {@inheritDoc} */
    @Override
    public void destroy() {
    
    }
    }
    

    您有两个选择:您可以在根 (/) 处注册一次此过滤器,但请记住,任何没有路径信息的请求都将被重定向到 index.html,或者您可以将其注册到您所在的子域想要它。在任何情况下,您都需要使用 equinox http 过滤器扩展。

        <extension
             point="org.eclipse.equinox.http.registry.filters">
          <filter
                alias="/mydomain"
                class="com.abc.filters.WelcomeFilter">
          </filter>
       </extension>
    

    【讨论】:

    • 过滤器不在当前规范中,因此您将实现绑定到 HTTP 服务的特定实现。正在努力在下一版本的 HTTP 服务规范中添加对过滤器的支持。
    • 您建议将&lt;extension&gt; xml 添加到哪个xml 文件?
    • @pstanton 您需要在您的 plugin.xml 中添加它
    【解决方案2】:

    没有标准化的方式来定义 OSGi 服务器中的默认(或欢迎)页面。

    巧合的是,我遇到了同样的情况,并决定将此功能添加到Amdatu-Web 项目中。除了允许通过 Web 提供非 Java 资源外,它现在还允许您定义一个默认页面,例如:

    X-Web-Resource-Default-Page: index.html
    

    或特定目录的默认页面:

    X-Web-Resource-Default-Page: /path=index.html
    

    如果没有文件被请求,将提供默认页面。

    它还没有完全完成,因为它需要一些审查,我需要在 Amdatu 网站上更新一些文档和示例。但是,您已经可以查看代码(尤其是 BitBucket 项目中的演示项目)以了解它应该如何工作。

    【讨论】:

    • 感谢指点,我怕没有标准的方法。这肯定应该很快添加到 OSGI 服务器中,这是一个非常基本且需要的功能!
    【解决方案3】:

    过滤器对我不起作用(使用 Kura/Equinox),但是,使用自定义 HttpContext 实现,我能够在 getResources 中添加所需的逻辑。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 2013-02-03
      • 2019-01-18
      • 1970-01-01
      • 2018-02-04
      • 2021-11-25
      • 1970-01-01
      • 2014-09-03
      • 2016-12-27
      相关资源
      最近更新 更多