我在虚拟主机附件上使用路由器时看不到任何问题,因为Restlet允许复合元素来构建请求处理链.
这里的问题是路由器可以支持多个路由,并且您使用完全匹配模式(实际上是默认模式).
我们来试试吧.如果pair.uriPattern包含/ test并且您在此路由上附加了路由器.无论你在路由器上指定了什么,只会处理路径/测试(空路线除外;-)
我想你想要实现子路由匹配,所以你应该考虑在将路由器连接到虚拟主机时使用匹配的启动:
Router router = (...)
Component component = new Component();
component.getServers().add(Protocol.HTTP, port);
component.getDefaultHost()
.attach(pair.uriPattern, router)
.setMatchingMode(Template.MODE_STARTS_WITH);
component.getDefaultHost().attach("/heartbeat", new HeartbeatRestlet());
在这种情况下,所有以pair.uriPattern的值开头的请求都将由路由器处理.所以路由器应该像这样定义:
Router router = new Router();
router.attach("/something", yourRestlet1);
router.attach("/somethingelse", yourRestlet2);
在这种情况下,我们将有以下行为:
>将使用yourRestlet1处理路由pair.uriPattern“/ something”
>将使用yourRestlet2处理路由pair.uriPattern“/ somethingelse”
实际上,这种方法是组织应用程序代码的好方法.
希望它能帮到你,
蒂埃里