JavaWeb——请求转发与请求重定向
请求转发:服务器行为
,request.getRequestDispatcher(URL地址).forward(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
。
请求重定向:客户端行为
,response.sendRedirect(URL地址),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
。
①客户端发送请求数据给服务器②服务器接收请求数据并调用第一个Servlet处理逻辑③第一个Servlet处理完数据后将数据在服务器内部
传递给下一个Servlet④第二个servlet处理完数据后调用forward()方法将最终处理结果返回给客户端
①客户端发送请求数据给服务器
②服务器接收请求数据并调用一个Servlet处理逻辑
③服务器调用sendRedirect()方法将处理结果放进HTTP响应头
中并返回给客户端
④客户端收到响应结果后,从HTTP响应头中取得相关信息,再次发送请求数据给服务器
。
3.2.1.请求转发:由于转发是服务器内部行为
,此时绝对路径开头的"/"
指的是当前Web程序的根目录
。因此若使用转发,绝对路径的写法应为"/资源名"。
“/login.jsp"或者”/servlet/LoginServlet"
3.2.2.请求重定向:由于重定向是服务器向客户端发送一个请求头信息,客户端再请求一次服务器
,此时绝对路径开头的"/"
指的是Tomcat服务器的根目录
,因此若使用重定向,绝对路径的写法应为"/当前Web程序名称/资源名"。
“/WebModule/login.jsp"或者”/WebModule/servlet/LoginServlet"
4.1.URL地址问题
请求转发是属于请求
对象的方法(调用HttpServletRequest对象的方法)
请求重定向是属于响应
对象的方法(调用HttpServletResponse对象的方法)
请求转发会在每次刷新时会重新向服务器发送请求,每刷新一次,就重新发送一次请求。对于表单提交来讲,若提交表单后再重新加载页面,使用转发可能会导致信息的重复提交,因此,表单提交需要使用请求重定向
请求转发只能访问当前服务器中的某些页面,因此若要访问其他服务器
上的页面,需要使用请求重定向
。