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

         拦截器中以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()返回的字符串。   

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值