2

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

4

3 回答 3

2

如果您只想在资源上具有转到 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>
于 2013-08-05T21:52:34.723 回答
0

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

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

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

或特定目录的默认页面:

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

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

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

于 2013-08-03T13:11:21.193 回答
0

过滤器对我不起作用(使用 Kura/Equinox),但是,使用自定义 HttpContext 实现,我能够在getResources.

于 2015-05-20T07:26:17.063 回答