1. 语法:
(1). 请求的转发:
先初始化对象RequsetDispatcher,调用request的getRequestDispatcher(String path);
path为要转发的地址。
再调用RequestDispatcher对象的forward(request,response);
path要以/开头
也可以一次性的写为:
request.getRequestDispatcher(URL地址).forward(request, response)
例如(要将请求转发到testServlet):
String path = "testServlet";
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+path);
requestDispatcher.forward(request, response);
(2). 请求的重定向
直接调用response对象的sendRedirect(String path)方法,path为要请求重定向的地址
例如(要将请求重定向到testServlet):
String path = "testServlet";
response.sendRedirect(path);
2. 本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。
3. 具体:
(1). 请求的转发:地址栏是初次发出请求的地址
请求的重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的那个地址
(2). 请求的转发:在最终的Servlet中,request对象和中转的那个request是同一个对象
请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象
(3). 请求的转发:只能转发给当前WEB应用的资源
请求的重定向:可以重定向到任何资源。例如response.sendRedirect("http://www.baidu.com");
(4). 请求的转发:/ 代表的是当前WEB应用的根目录
请求的重定向:/ 代表的是当前WEB站点的根目录(指Tomcat)
注意:
当前WEB应用的根目录:例如http://localhost:8989/day_30/
站点的根目录:http://localhost:8989/
4. 请求转发的流程:
(1).客户端发送请求,Servlet做出业务逻辑处理。
(2).Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。
5. 请求重定向的流程
(1).客户端发送请求,Servlet做出业务逻辑处理。
(2).Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
(3).客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。
网友评论