依旧是参考54chen写的rose手册,重新整理下rose的拦截器功能。
参考网址:http://www.54chen.com/rose.html
一、拦截器的例子
需要注意几点:
- 拦截器要放在controllers下(高级用法:打在rose-jar包里,参见5.1)
- 继承net.paoding.rose.web.ControllerInterceptorAdapter
- 按照实现的方法名,在controller执行前、中、后执行:
- before:在controller执行前执行。
- after:在controller执行中(后)执行,如果一个返回抛出了异常,则不会进来。
- afterCompletion:在controller执行后执行,不论是否异常,都会进来。
- isForAction:定义满足某条件的才会被拦截。
拦截器可动的位置细节
- 上面都讲得差不多了,实际上还有不少地方可以拦截的:
- isForDispatcher:根据响应的情况判断是否拦截,比如说是正常请求、内部forward、还是include (但是没用过)
- setPriority:设置一个数字表示拦截优先级,当有多个拦截器时,要精准控制,数字小的内层,大的在外层,在最外层的before方法最先执行,大家都执行完后它的after才最后执行。
- round:这才是真正的controller执行中执行,不过用得很少。
- getRequiredAnnotationClass:返回一个Annotation class name,表示这个拦截器只对此Annotation标过的controller才生效。常用。
二、ErrorHandler支持
- ErrorHanle致力于:统一捕捉和处理各种异常,可区分对待和返回;统一的出错体验。
- 非常类似做web开发时的500统一出错页面这样的东东。
三、controller层:门户必备portal支持
更加充分地使用多核cpu。 *更加方便多人协作时对项目进行模块划分,搞的时候,按照url一分,一个url一个模块,所有的页面都可以切成小的豆腐块
四、controller层:门户必备pipe支持
如果是portal,那会多个线程执行完成一起返回,而pipe则会用js反写的方式,一个线程一个线程地返回给用户。