如果我们使用 requestdispatcher.forward() 转发来自 spring mvc 的请求并且仍然 return true 会发生什么?

What happens if we forward request from spring mvc using requestdispatcher.forward() and still return true ?

我有一个受保护的请求映射“/admin”,进入此 url 模式的请求必须通过拦截器,因为我正在检查用户的角色,如果用户有 "guest" 角色我将该请求转发到某个角色请求页面,否则为普通页面。

喜欢下面

public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {
if(role == "admin"){
// do nothing
} else 
{
request.getRequestDispatcher("rolerequestpage").forward(
                request, response);
}
return true;
}

现在我在同一响应中同时获得角色请求页面和管理页面。

RequestDispatcher 定义了一个对象,它从客户端接收请求并将它们发送到服务器上的任何资源(例如 servlet、HTML 文件或 JSP 文件)。 servlet 容器创建 RequestDispatcher 对象,该对象用作位于特定路径或由特定名称指定的服务器资源的包装器。

实际上 RequestDispatcher.forward() 和 RequestDispatcher.include() 只是对另一个 JSP/servlet.

的方法调用

一旦完成,控制(程序流程)确实返回到该行之后的行。转发后的代码主体仍将被处理,任何未处理的异常将被抛给请求的 servlet。

控制权绝对归还。但是,对于您之后可以做的事情有一些限制——特别是,您不能再写入响应(假设转发到的 servlet 已经解决了这个问题),所以唯一谨慎的做法是"return".