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