首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Restlet模式

Restlet模式
EN

Stack Overflow用户
提问于 2015-10-09 09:05:33
回答 1查看 647关注 0票数 1

我工作在2.1-M7版本的Restlet (我必须更新它,但这是另一个问题)

我直接使用Restlet,在启动组件之前没有任何any服务器。在上面添加一些虚拟主机。

在主机中,我使用方法附加(string uriPattern,Restlet )添加入口点。

我的问题是:当我用entrypoint Test.class添加uri "/test“(使用打印"hello world”的方法)时,我可以称之为"/testmeagain“,这是工作(返回"hello world"),因为它是一个模式?

所以我用这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true

然后试试"/test$“,但是在卷曲中,"/test”和"/testmeagain“现在返回404

也许我错过了什么?

如果你有任何建议或回应来帮助我,谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 09:24:34

事实上,在Restlet,有一个路线的匹配模式。以下是框架中的行为:

  • 当您在虚拟上附加路由时,默认模式是“开始于”。因此,有了像attach("/test", ...)这样的东西,像/test/testsomething这样的URL就会匹配。
  • 在路由器上附加路由时,默认模式为“等于”。因此,对于类似attach("/test", ...)的内容,只有URL /test才能匹配。

attach方法返回一个模板路由,您可以在该路径上更改此匹配:

代码语言:javascript
复制
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应用程序并将其附加到组件上的虚拟主机。在这种情况下,您将得到精确的匹配。

下面是做这些事情的方法:

代码语言:javascript
复制
Component component = new Component();
(...)
MyRestletApplication application = new MyRestletApplication();
component.getDefaultHost().attachDefault(application);

下面是应用程序的示例内容:

代码语言:javascript
复制
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;
    }
}

以及服务器资源的内容:

代码语言:javascript
复制
public class MyServerResource extends ServerResource {
    @Get
    public String test() throws Exception {
        return "test";
    }
}

希望它能帮到你,蒂埃里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33034196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档