请求转发:forward(); 重定向:sendRedirect()
来看具体实例:
在HTML页面写两个a链接请求,这个就是get请求了,然后建立与请求对应的servlet,页面代码如下所示:
1
2
3
4
5
请求转发实例6
7
8 Forward测试页面
9 foward请求
10
11 send重定向
12
13
然后建立 请求转发ForWardServlet,并且在web.xml中配置,这个就不说了
1 packagecom.servlet;2
3 importjava.io.IOException;4
5 importjavax.servlet.RequestDispatcher;6 importjavax.servlet.ServletException;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10
11 public class ForwardServlet extendsHttpServlet {12 private static final long serialVersionUID = 1L;13
14 protected voiddoGet(HttpServletRequest request, HttpServletResponse response)15 throwsServletException, IOException {16 request.setAttribute("forward_name", "abcde");17 System.out.println("请求转发获取的属性:" + request.getAttribute("forward_name"));18 System.out.println("ForwardServlet 的 doGet()方法");19 //转发请求
20 String path = "testServlet";21 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" +path);22 requestDispatcher.forward(request, response);23 }24
25 }
再建立 请求重定向SendServlet,并且在web.xml中配置,这个也就不说了
1 packagecom.servlet;2
3 importjava.io.IOException;4
5 importjavax.servlet.ServletException;6 importjavax.servlet.annotation.WebServlet;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10
11 @WebServlet(name = "sendServlet", urlPatterns = "/sendServlet")12 public class SendServlet extendsHttpServlet {13 private static final long serialVersionUID = 1L;14
15 protected voiddoGet(HttpServletRequest request, HttpServletResponse response)16 throwsServletException, IOException {17 request.setAttribute("send_name", "abcde");18 System.out.println("重定向获取的属性:" + request.getAttribute("send_name"));19 System.out.println("SendServlet 的doGet 方法");20 String path = "testServlet";21 response.sendRedirect(path);22
23 }24
25 }
然后建立path中所提到的 TestServlet
1 packagecom.servlet;2
3 importjava.io.IOException;4
5 importjavax.servlet.ServletException;6 importjavax.servlet.annotation.WebServlet;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10
11 @WebServlet("/testServlet")12 public class TestServlet extendsHttpServlet {13 private static final long serialVersionUID = 1L;14
15 protected voiddoGet(HttpServletRequest request, HttpServletResponse response)16 throwsServletException, IOException {17 //TODO Auto-generated method stub
18 System.out.println("TestServlet 的 doGet 方法");19
20 System.out.println("测试请求转发获取的属性:" + request.getAttribute("forward_name"));21
22 System.out.println("测试重定向获取的属性:" + request.getAttribute("send_name"));23 }24
25 }
好了,接下来就是看请求转发和重定向的主要区别:
(1) 请求转发forward 只有一次请求,而重定向是两次请求:
(2)请求转发:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(ForwardServlet)中的request对象是同一个对象
重定向:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(SendServlet)中的request对象不是同一个对象
(3)请求转发:地址栏中的url是初次发起请求的地址
重定向:地址栏中的url是最终响应的的那个地址
(3)请求转发:仅限于当前web应用内,"/"代表当前web应用的根目录
请求重定向:可以定向到任何资源,"/"代表当前web站点的根目录