使用 Restlet 和 GAE 过滤 ROOT 路径
Filtering ROOT path with Restlet and GAE
我有这段代码,我需要在访问 ROOT_URI
时触发 MyFilter:
private static final String ROOT_URI = "/";
private static final String ROOT_REST_URI = "/rest/";
@Override
public Restlet createInboundRoot() {
Guice.createInjector(new GuiceConfigModule(this.getContext()),
new SelfInjectingServerResourceModule());
Router router = new Router(getContext());
router.attach(ROOT_URI + "{id}", new GaeRedirector(getContext(), "{id}"));
router.attach(ROOT_REST_URI, GaeRootServerResource.class);
MyFilter mFilter = new MyFilter(getContext());
MyFilter.setNext(router);
return mFilter;
}
MyFilter 仅在访问ROOT_REST_URI 时触发。 Restlet 团队已经通过邮件组建议我需要先将路由放入 ROOT_URI。
问题是,
ROOT_URI
不在路由中,因为在 web.xml 中,welcome-file
设置指向 index.html。因此,当 http://localhost:8080/
被访问时,它 returns index.html 页面。
我也尝试添加(作为到 ROOT_URI 的路由以使 MyFilter 在 ROOT_URI 上工作):
Directory directory = new Directory(getContext(), "war:///doc");
router.attach(ROOT_URI, directory);
但是,此目录路由不适用于 GAE。它似乎根本不会触发。使用此目录代码访问 http://localhost:8080/
,仍会显示 index.html,并且不会触发 MyFilter
。
现在,如果我删除 web.xml 中的 <welcome-file>
。 MyFilter 被触发,但 index.html
现在无法显示。除非通过在请求中明确添加 /index.html
。
这种情况可能有什么解决方案?
我会尝试为目录设置默认索引名称,如下所示:
Directory directory = new Directory(getContext(), "war:///doc");
directory.setIndexName("index.html");
我有这段代码,我需要在访问 ROOT_URI
时触发 MyFilter:
private static final String ROOT_URI = "/";
private static final String ROOT_REST_URI = "/rest/";
@Override
public Restlet createInboundRoot() {
Guice.createInjector(new GuiceConfigModule(this.getContext()),
new SelfInjectingServerResourceModule());
Router router = new Router(getContext());
router.attach(ROOT_URI + "{id}", new GaeRedirector(getContext(), "{id}"));
router.attach(ROOT_REST_URI, GaeRootServerResource.class);
MyFilter mFilter = new MyFilter(getContext());
MyFilter.setNext(router);
return mFilter;
}
MyFilter 仅在访问ROOT_REST_URI 时触发。 Restlet 团队已经通过邮件组建议我需要先将路由放入 ROOT_URI。
问题是,
ROOT_URI
不在路由中,因为在 web.xml 中,welcome-file
设置指向 index.html。因此,当http://localhost:8080/
被访问时,它 returns index.html 页面。
我也尝试添加(作为到 ROOT_URI 的路由以使 MyFilter 在 ROOT_URI 上工作):
Directory directory = new Directory(getContext(), "war:///doc");
router.attach(ROOT_URI, directory);
但是,此目录路由不适用于 GAE。它似乎根本不会触发。使用此目录代码访问 http://localhost:8080/
,仍会显示 index.html,并且不会触发 MyFilter
。
现在,如果我删除 web.xml 中的 <welcome-file>
。 MyFilter 被触发,但 index.html
现在无法显示。除非通过在请求中明确添加 /index.html
。
这种情况可能有什么解决方案?
我会尝试为目录设置默认索引名称,如下所示:
Directory directory = new Directory(getContext(), "war:///doc");
directory.setIndexName("index.html");