关于拦截器的return 返回值问题。

来源:互联网 发布:dota2如何公开数据 编辑:程序博客网 时间:2024/04/29 18:42
        拦截器中以invocation.invoke()为分界线,一般默认拦截器:都 先执行拦截器中的invocation.invoke();方法  即会进入递归  到下一个拦截器,最后一个拦截器时  就会检测到后面没有拦截器可以递归啦  就调用actionAction(继承ActionSupport类)的入口是execute()方法,execute方法中会返回一个字符串,通过fliter以及xml配置文件  找到重定向的url

   第一种情况:Action继承了ActionSupport父类,就会执行execute()方法,这是入口。即使你的Action类(必须是继承了ActioSupport父类)中不重写execute()方法,也会自动调用父类的execute()方法,父类的execute默认返回的是字符串是SUCCESS. 

   另一种情况:就是Action没有继承ActionSupport父类,这是不值得提倡的。 里面可以自己写很多方法函数。通过通配的方法调用  Action中指定的方法。通过指定路径访问(通配符实现) 一般写法如下:<package name="" namespace="/" extends="strutsdefault" > <action name="test_*" class="cn.itcast.Action.TestAction" method="{1}">   访问路径http://localhost:8080/intecepter/test_save 其中intecepter项目名称,test_save指定save()方法。 

         不管是哪一种情况,一旦经过拦截器到达Action 后,个人认为其实他也就说明了前面的拦截器都通过啦,拦截器的作用已经达到(没有错误,所以没拦截,才到达Action)此时返回的jsp页面是action 决定的。经过action后又逆向经过拦截器栈,此时都一定会在执行各自拦截器中invocation.invoke()方法后的其他后续操作,但其后的return 返回字符串其实不在起作用,也绝不会定向到字符串所指的页面。(可能会起到最后结束这个拦截器的作用吧  这一点不清楚 无法改变源码中接口 不能把intercept()变成void类型??所以还未证实)。

        拦截器的作用顾名思义,就是对指定Action起拦截作用。所以一旦拦截到错误,就会定向到指定页面,这时 return 返回字符串就起到了 关键作用,可能这就是拦截器public String intercept() 为什么要求是string类型   拦截器中发现不符合要求就会返回字符串中断拦截器从而定向到指定页面,这时其后也就不会在执行什么invocation.invoke();所以不存在return 返回字符串语句写在invocation.invoke()方法之前,默认拦截器中return result;返回的都是invocation.invoke(),实际上就是最后变成execute()返回的字符串。   

原创粉丝点击