Restlet URI 模式
Restlet URI Pattern
我在使用 2.1-M7 版本的 Restlet(我必须更新它,但这是另一个问题)
我直接使用Restlet,在启动组件之前没有任何网络服务器。在上面添加一些虚拟主机。
在主机中,我使用方法 attach(string uriPattern, Restlet entrypoint) 添加入口点
我的问题是:
当我添加带有入口点 Test.class 的 uri“/test”(使用打印方法:"hello world")和卷曲时,我可以调用“/testmeagain”并且它可以工作(return "hello world") 因为它是一种模式?
所以我用这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true
然后尝试“/test$”,但在 curl“/test”和“/testmeagain”中 return 404 现在
也许我错过了什么?
如果您有任何帮助我的建议或回复,谢谢。
其实在Restlet中,路由是有匹配模式的。这是框架中的行为:
- 在虚拟机上附加路由时,默认模式为"STARTS WITH"。所以像
attach("/test", ...)
这样的东西,URL 像 /test
和 /testsomething
会匹配。
- 在路由器上附加路由时,默认模式为"EQUALS"。所以像
attach("/test", ...)
这样的东西,只有 URL /test
会匹配。
attach
方法returns一个模板路由,您可以在其中更改此匹配:
TemplateRoute route = component.getDefaultHost().attach(
"/test", new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("test", MediaType.TEXT_PLAIN);
}
});
// Default matching mode
int defaultMatching = route.getMatchingMode();
// Set another matching mode
route.setMatchingMode(Template.MODE_EQUALS);
实际上,更常见的是实现一个Restlet 应用程序并将其附加到组件上的一个虚拟主机上。在这种情况下,您将获得完全匹配。
方法如下:
Component component = new Component();
(...)
MyRestletApplication application = new MyRestletApplication();
component.getDefaultHost().attachDefault(application);
这是应用程序的示例内容:
public class MyRestletApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
TemplateRoute route = router.attach("/test", MyServerResource.class);
// Default matching mode
int defaultMatching = route.getMatchingMode();
return router;
}
}
以及服务器资源的内容:
public class MyServerResource extends ServerResource {
@Get
public String test() throws Exception {
return "test";
}
}
希望对你有帮助,
蒂埃里
我在使用 2.1-M7 版本的 Restlet(我必须更新它,但这是另一个问题)
我直接使用Restlet,在启动组件之前没有任何网络服务器。在上面添加一些虚拟主机。
在主机中,我使用方法 attach(string uriPattern, Restlet entrypoint) 添加入口点
我的问题是: 当我添加带有入口点 Test.class 的 uri“/test”(使用打印方法:"hello world")和卷曲时,我可以调用“/testmeagain”并且它可以工作(return "hello world") 因为它是一种模式?
所以我用这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true
然后尝试“/test$”,但在 curl“/test”和“/testmeagain”中 return 404 现在
也许我错过了什么?
如果您有任何帮助我的建议或回复,谢谢。
其实在Restlet中,路由是有匹配模式的。这是框架中的行为:
- 在虚拟机上附加路由时,默认模式为"STARTS WITH"。所以像
attach("/test", ...)
这样的东西,URL 像/test
和/testsomething
会匹配。 - 在路由器上附加路由时,默认模式为"EQUALS"。所以像
attach("/test", ...)
这样的东西,只有 URL/test
会匹配。
attach
方法returns一个模板路由,您可以在其中更改此匹配:
TemplateRoute route = component.getDefaultHost().attach(
"/test", new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("test", MediaType.TEXT_PLAIN);
}
});
// Default matching mode
int defaultMatching = route.getMatchingMode();
// Set another matching mode
route.setMatchingMode(Template.MODE_EQUALS);
实际上,更常见的是实现一个Restlet 应用程序并将其附加到组件上的一个虚拟主机上。在这种情况下,您将获得完全匹配。
方法如下:
Component component = new Component();
(...)
MyRestletApplication application = new MyRestletApplication();
component.getDefaultHost().attachDefault(application);
这是应用程序的示例内容:
public class MyRestletApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
TemplateRoute route = router.attach("/test", MyServerResource.class);
// Default matching mode
int defaultMatching = route.getMatchingMode();
return router;
}
}
以及服务器资源的内容:
public class MyServerResource extends ServerResource {
@Get
public String test() throws Exception {
return "test";
}
}
希望对你有帮助, 蒂埃里