`

Dispatcher的forward有return功能?

JSP 
阅读更多

这个问题以前一直没有注意,也没有想到会有人这么来想,直到前两天的一次代码走查会上。

情况是这样的:由于业务需求,要加一个 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功能。

记在这里,以防止自己以后再重验证,也不至于犯这样的错误。
0
0
分享到:
评论

相关推荐

    关于action 不能用forward的问题

    在Struts2框架中,为了使forward功能正常工作,必须确保在web.xml文件中正确配置了Struts2的过滤器。具体来说,我们需要关注以下几点: 1. **Filter配置**: ```xml <filter-name>struts2 <filter-class>org....

    07_shiro授权测试及与web项目集成

    <dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 对于权限测试,Shiro 提供了注解方式,如 `@RequiresRoles` 和 `@RequiresPermissions`,可以直接在 Controller 方法上声明,实现基于...

    jsp+servlet实现登录功能

    dispatcher.forward(request, response); } else { // 验证失败,转发到错误页面 request.setAttribute("errorMsg", "用户名或密码错误"); RequestDispatcher dispatcher = request.getRequestDispatcher(...

    struts2中常用Result类型(type)的用法和出现的问题

    常用的 Result 类型有 dispatcher、redirect 和 chain 三种。这三种类型的用法和实现方式如下: 一、dispatcher dispatcher 是 Struts2 中的默认 Result 类型,它将请求转发到指定的页面或资源。使用 dispatcher ...

    SSM+shiro登录控制

    <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` 然后,我们需要在Shiro的配置类中设置登录URL、未授权URL以及定义拦截规则。例如: ```java @...

    Shiro中进行角色与权限认证流程示例代码.zip

    <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` 通过以上步骤,我们就完成了 Shiro 中的角色与权限认证流程。这个示例代码可以帮助你理解如何在实际...

    Java Web中的页面跳转.pdf

    在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...

    shiro动态URL权限控制

    <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` Shiro的动态URL权限控制主要是通过`AuthorizationFilter`实现的,这个过滤器会检查当前用户是否有...

    struts2实现上传

    <dispatcher>FORWARD</dispatcher> <filter-name>struts2 <url-pattern>/* <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <filter-name>struts2 <filter-class>org.apache....

    实验四 JavaBean及Servlet使用

    dispatcher.forward(request, response); } } } ``` 在这个实验中,学生将学习如何使用JavaBean封装数据,通过Servlet处理HTTP请求,以及DAO模式在数据库操作中的应用。此外,还将了解JavaScript客户端验证、JSP...

    权限管理shiro的使用

    <dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 2. 方法级别权限:在Java代码中,可以使用`@RequiresPermissions`注解来限制只有拥有特定权限的用户才能执行该方法。 ```java @Service ...

    shiro web中自定义Realm

    <dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 4. **测试与调试** 创建一个简单的登录界面,提交表单数据到Shiro的登录URL(默认为`/j_spring_security_check`),然后Shiro会处理登录...

    jfinalpluginsjfinal-dreampie.zip

    jfinal-dreampie是一个基于jfinal的开源框架库,主要集成或调优功能如下(由于篇幅原因部分源码未贴出,可以到github下载源码): 1.缓存维护更细粒度  @CacheNameRemove(name = AppConstants.DEFAULT_...

    Java Web应用开发:新品和特价商品展示.docx

    dispatcher.forward(request, response); } else if ("original".equals(action)) { // 查询新品 List<Product> products = productDao.selectProductDiscount(0); request.setAttribute("products", products);...

    jsp页面跳转

    - 如果在 `<jsp:forward>` 标签之前有大量的输出导致缓冲区溢出,可能会影响其正常工作。 **示例代码:** ```jsp <jsp:forward page="/target.jsp" /> ``` #### 四、修改HTTP header的Location属性来重定向 **...

    struts配置及实例

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <filter-name>struts2 <url-pattern>/* <servlet-name>action <servlet-class>org.apache.struts.action.Action...

    简单的jsp+servlet+javaBean实现MVC

    dispatcher.forward(request, response); } } ``` 4. **配置Web应用** 在`web.xml`配置文件中,我们需要定义Servlet的映射。假设`UserControllerServlet`类位于`com.example.mvc.controller`包下: ```xml ...

    JAVAWEB课程设计报告 (2).docx

    dispatcher.forward(request, response); } } ``` #### 3. 购物车商品项类 ```java public class ShoppingCartItem { private Goods goods; private int quantity; public ShoppingCartItem(Goods goods, int...

    Struts1的一个小实例

    例如,我们可能有一个简单的用户登录功能,可以这样配置: ```xml <forward name="success" path="/jsp/success.jsp"/> <forward name="error" path="/jsp/error.jsp"/> ``` 这里的`com.example.LoginAction`是...

    shiro 单点登录.docx

    <dispatcher>FORWARD</dispatcher> ``` 通过以上步骤,Shiro 将与 CAS 服务协作,实现单点登录功能。用户在 CAS 服务器上认证后,可以在多个受 Shiro 保护的应用之间自由切换,无需重复登录。同时,Shiro 还提供...

Global site tag (gtag.js) - Google Analytics