如果我们使用 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".
我有一个受保护的请求映射“/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".