这个问题以前一直没有注意,也没有想到会有人这么来想,直到前两天的一次代码走查会上。
情况是这样的:由于业务需求,要加一个 Filter,在doFilter中据业务逻辑来决定跳转到具体的jsp页面,这个跳转是用RequestDispatcher的forward方法来实施的, 如果业务条件都不满足,执行一个具体的业务查询(往Session中放些数据)。
doFilter方法中的具体模拟代码如下:
if(conditionA){
dispatcher = request.getRequestDispatcher("/jspA.jsp");
dispatcher.forward(request,response);
}
if(conditionB){
dispatcher = request.getRequestDispatcher("/jspB.jsp");
dispatcher.forward(request,response);
}
//执行其它业务逻辑
putSomeDataIntoSession(request);
代码大致是这样的, 问题的焦点集中到了,如果conditionA满足执行dispatcher.forward(request,response)后,putSomeDataIntoSession方法会不会再执行?
我的观点是putSomeDataIntoSession方法还会执行的, 代码作者的观点是不会再执行,他的理由是执行forward后整个doFilter方法就退出。
会上没有纠缠这个事, 毕竟要考虑到一些其它非技术的影响。
回到办公室,我为了证明自己的观点(也算是验证自己的观点吧),特地做了个实验(见附件)。
我的观点是正确的, Dispatcher的forward没有return功能。
记在这里,以防止自己以后再重验证,也不至于犯这样的错误。
分享到:
相关推荐
Laravel开发-dispatcher Laravel 5基于事件的请求和命令调度程序
所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 ...
OpenWrt dispatcher说明文档,
Laravel开发-dispatcher 任务分发器 计划任务分配器(直接可替换掉cron),L5内设置了类似的功能
plexus-sec-dispatcher-1.3.jar
java实现的常用通信协议http,https,ftp,sftp,socket短链,socket长链单工,socket长链双工
javaweb项目 DispatcherServle源码详解 web.xml 配置
xml里filter-mapping中的dispatcher的使
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
幻灯片https://www.slideshare.net/nakhimovich/mike-nakhimovich230leftstage
org.apache.struts2.dispatcher.FilterDispatcher
离线安装包,亲测可用
Zend Framework的分发器Zend_Controller_Dispatcher设计主要有,如下类和接口组成: ├── Dispatcher │ ├── Abstract.php │ ├── Exception.php │ ├── Interface.php │ └── Standard.php Zend_...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
kamailio-etcd-dispatcher 将针对Asterisk的服务发现添加到Kamailio,让Kamailio动态发现Asterisk框,然后对其进行负载平衡。 修改Kamailio调度程序,以使Kamailio充当用etcd发现的计算机的负载平衡器。 该工具会...
官方离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
Diff Dispatcher A simple annotation processor for generating data class changes dispatcher Applications which use unidirectional UI archictures have UI state passed to a single "render"-method. ...