这个问题以前一直没有注意,也没有想到会有人这么来想,直到前两天的一次代码走查会上。
情况是这样的:由于业务需求,要加一个 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功能。
记在这里,以防止自己以后再重验证,也不至于犯这样的错误。
分享到:
相关推荐
在Struts2框架中,为了使forward功能正常工作,必须确保在web.xml文件中正确配置了Struts2的过滤器。具体来说,我们需要关注以下几点: 1. **Filter配置**: ```xml <filter-name>struts2 <filter-class>org....
<dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 对于权限测试,Shiro 提供了注解方式,如 `@RequiresRoles` 和 `@RequiresPermissions`,可以直接在 Controller 方法上声明,实现基于...
dispatcher.forward(request, response); } else { // 验证失败,转发到错误页面 request.setAttribute("errorMsg", "用户名或密码错误"); RequestDispatcher dispatcher = request.getRequestDispatcher(...
常用的 Result 类型有 dispatcher、redirect 和 chain 三种。这三种类型的用法和实现方式如下: 一、dispatcher dispatcher 是 Struts2 中的默认 Result 类型,它将请求转发到指定的页面或资源。使用 dispatcher ...
<dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` 然后,我们需要在Shiro的配置类中设置登录URL、未授权URL以及定义拦截规则。例如: ```java @...
<dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` 通过以上步骤,我们就完成了 Shiro 中的角色与权限认证流程。这个示例代码可以帮助你理解如何在实际...
在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...
<dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> ``` Shiro的动态URL权限控制主要是通过`AuthorizationFilter`实现的,这个过滤器会检查当前用户是否有...
<dispatcher>FORWARD</dispatcher> <filter-name>struts2 <url-pattern>/* <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <filter-name>struts2 <filter-class>org.apache....
dispatcher.forward(request, response); } } } ``` 在这个实验中,学生将学习如何使用JavaBean封装数据,通过Servlet处理HTTP请求,以及DAO模式在数据库操作中的应用。此外,还将了解JavaScript客户端验证、JSP...
<dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 2. 方法级别权限:在Java代码中,可以使用`@RequiresPermissions`注解来限制只有拥有特定权限的用户才能执行该方法。 ```java @Service ...
<dispatcher>FORWARD</dispatcher> <dispatcher>ERROR</dispatcher> ``` 4. **测试与调试** 创建一个简单的登录界面,提交表单数据到Shiro的登录URL(默认为`/j_spring_security_check`),然后Shiro会处理登录...
jfinal-dreampie是一个基于jfinal的开源框架库,主要集成或调优功能如下(由于篇幅原因部分源码未贴出,可以到github下载源码): 1.缓存维护更细粒度 @CacheNameRemove(name = AppConstants.DEFAULT_...
dispatcher.forward(request, response); } else if ("original".equals(action)) { // 查询新品 List<Product> products = productDao.selectProductDiscount(0); request.setAttribute("products", products);...
- 如果在 `<jsp:forward>` 标签之前有大量的输出导致缓冲区溢出,可能会影响其正常工作。 **示例代码:** ```jsp <jsp:forward page="/target.jsp" /> ``` #### 四、修改HTTP header的Location属性来重定向 **...
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <filter-name>struts2 <url-pattern>/* <servlet-name>action <servlet-class>org.apache.struts.action.Action...
dispatcher.forward(request, response); } } ``` 4. **配置Web应用** 在`web.xml`配置文件中,我们需要定义Servlet的映射。假设`UserControllerServlet`类位于`com.example.mvc.controller`包下: ```xml ...
dispatcher.forward(request, response); } } ``` #### 3. 购物车商品项类 ```java public class ShoppingCartItem { private Goods goods; private int quantity; public ShoppingCartItem(Goods goods, int...
例如,我们可能有一个简单的用户登录功能,可以这样配置: ```xml <forward name="success" path="/jsp/success.jsp"/> <forward name="error" path="/jsp/error.jsp"/> ``` 这里的`com.example.LoginAction`是...
<dispatcher>FORWARD</dispatcher> ``` 通过以上步骤,Shiro 将与 CAS 服务协作,实现单点登录功能。用户在 CAS 服务器上认证后,可以在多个受 Shiro 保护的应用之间自由切换,无需重复登录。同时,Shiro 还提供...