让我们看看一些真实世界的例子,以了解处理(部分)路径的最常用方法:
遍历模型图
Getter: /log/… → Jenkins#getLog()
Getter with argument: /job/foo/… → Hudson#getJob("foo")
Dynamic getter: /job/foo/1/… → jenkinsdoc:hudson.model.Job#getDynamic%28java.lang.String,%20org.kohsuke.stapler.StaplerRequest,%20org.kohsuke.stapler.StaplerResponse%29[
Job#getDynamic("1" …)]
渲染视图
Index view: /job/foo*/ → *index.jelly of Job (or other TopLevelItem implementations)
Named view: /job/foo/changes → changes.jelly of Job
操作方法
操作方法
/job/foo/1/artifact → Run#doArtifact(…)
/job.foo/config.xml → @WebMethod("config.xml") doConfigDotXml(…)
索引操作方法
/search → Search#doIndex(…)
另外,对象可以实现多个接口来进一步控制Stapler如何处理URL:
org.kohsuke.stapler.StaplerProxy 允许将URL的处理委托给另一个对象。所以,对于 /foo/bar, 如果 getFoo() 返回一个实现 StaplerProxy 的 getTarget() 方法的对象 x , Stapler 将调用 x.getTarget() 并继续使用它来处理 URL 的其余部分(bar)。
这在所有可能的URL处理选项中具有*highest priority*。
getTarget() 也返回 this, 例如执行权限检查:对于没有通过URL获得必要权限的任何人,任何 getter 或 x 视图都不可用。
org.kohsuke.stapler.StaplerOverridable 是一个允许指定对象有选择地覆盖URL映射的接口。
如果指定的重写对象没有处理请求,则宿主对象(实现`StaplerOverridable`)将处理请求。
org.kohsuke.stapler.StaplerFallback 允许将URL的处理委托给另一个对象,类似于 StaplerProxy,但在所有可能的 URL 处理选项中具有 lowest priority。
有关 Stapler 如何将 Java 对象模型绑定(或固定)到URL层次结构的更多信息,请参阅 Stapler 引用文档。