JavaWeb——请求转发与请求重定向
1、概念
请求转发:服务器行为
,request.getRequestDispatcher(URL地址).forward(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
。
请求重定向:客户端行为
,response.sendRedirect(URL地址),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
。
2、工作流程(假设只请求一次<转发/重定向>)
请求转发
①客户端发送请求数据给服务器
②服务器接收请求数据并调用第一个Servlet处理逻辑
③第一个Servlet处理完数据后将数据在服务器内部
传递给下一个Servlet
④第二个servlet处理完数据后调用forward()方法将最终处理结果返回给客户端
请求重定向:
①客户端发送请求数据给服务器
②服务器接收请求数据并调用一个Servlet处理逻辑
③服务器调用sendRedirect()方法将处理结果放进HTTP响应头
中并返回给客户端
④客户端收到响应结果后,从HTTP响应头中取得相关信息,再次发送请求数据给服务器
。
3、路径问题
3.1.若URL地址使用相对路径,转发和重定向中没有区别。
3.2.若URL地址使用绝对路径
3.2.1.请求转发:由于转发是服务器内部行为
,此时绝对路径开头的"/"
指的是当前Web程序的根目录
。因此若使用转发,绝对路径的写法应为"/资源名"。
“/login.jsp"或者”/servlet/LoginServlet"
3.2.2.请求重定向:由于重定向是服务器向客户端发送一个请求头信息,客户端再请求一次服务器
,此时绝对路径开头的"/"
指的是Tomcat服务器的根目录
,因此若使用重定向,绝对路径的写法应为"/当前Web程序名称/资源名"。
“/WebModule/login.jsp"或者”/WebModule/servlet/LoginServlet"