2015-10-09 30 views
1

我上的Restlet 2.1-M7版工作(我有更新,但这个是另一个问题)的Restlet URI模式

我直接使用的Restlet,无需任何网络服务器就开始组件之前。在它上面添加一些虚拟主机。

而且在我添加的入口点与方法连接主机(字符串uriPattern,入口点的Restlet)

我的问题是: 当我附上URI“/测试”与入口点的Test.class(添加使用curl打印:“hello world”)的方法我可以调用“/ testmeagain”并且它是工作(返回“hello world”),因为它是一种模式?

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

并尝试 “/测试$”,但在卷曲 “/测试” 和 “/ testmeagain” 返回404现在

也许我错过了什么?

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

回答

1

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

  • 当您在虚拟路径上附加路由时,默认模式为“STARTS WITH”。因此,像attach("/test", ...)之类的URL将会匹配,如/test/testsomething
  • 在路由器上附加路由时,默认模式为“EQUALS”。所以像attach("/test", ...)这样的东西,只有网址/test会匹配。

attach方法返回一个模板路线上,你可以改变这种匹配:

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"; 
    } 
} 

希望它可以帮助你, Thierry

+0

谢谢蒂埃里,我会继续努力吧。尝试设置匹配模式而无需等待应用程序。祝你今天愉快 – Electron