/foo/bar/index -> Foo::index() /test123.html -> Bar::default() /cookies/list/fresh -> Cookies::list() #### # /foo/bar/index package Foo::Bar; sub index : Relative { ... } # /test123.html package Foo::Bar; sub test : Path('/test123.html') { ... } # /cookies/list/fresh package Cookies; sub list : Relative Args(1) { ... } #### @Servlet(urlMappings={"/foo", "/bar"}) public class ControllerWithAnnotations { @GET public void handleGet(HttpServletRequest req, HttpServletResponse res) { ... } } #### # /foo/bar/index on 'foo/bar/index' => do { ... } # /test123.index on 'test123.html' => do { ... } # /cookies/list/fresh on '/cookies/list/*' => do { ... } #### __PACKAGE__->action('/foo/bar/index' => sub { ... }); #### # /foo/bar/index map.connect 'foo/bar/index', :controller => "foo", :action => "index" # /test123.html map.connect 'test123.html', :controller => "foo", :action => "test" # /cookies/list/fresh map.connect ':controller/:action/:quality', :controller => "cookies", :action => "list", :quality => "fresh", :requirements => { :quality => /\w+/ } #### <%= link_to "Fresh Cookies", :controller => "cookies", :action => "list", :quality => "fresh" %> #### # /foo/bar/index r.match("/foo/bar/index").to(:controller => "foo", :action => "index") # /test123.html r.match("/test123.html").to(:controller => "foo", :action => "test") # /cookies/list/fresh r.match(%r[^/cookies/list/(\w+)$]).to(:controller => "cookies", :action => "list", :quality => 'path[1]') #### urlpatterns = patterns('', (r'^foo/bar/index$', 'foo.views.index'), (r'^test123\.html$', 'foo.views.test'), (r'^cookies/list/(\w+)$', 'cookies.views.list'), ) #### # /foo/bar/index $r->route('/foo/bar/index')->to(controller => 'foo', action => 'index'); # /test123.html $r->route('/test123.html')->to(controller => 'foo', action => 'test'); # /cookies/list/fresh $r->route('/:controller/:action/:quality', quality => qr/\w+/) ->to(controller => 'cookies', action => 'list', quality => 'fresh'); $c->url_for(controller => 'cookies', action => 'list', quality => 'fresh');