java 转发_JavaWeb中的 请求转发 和 重定向

请求转发: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 只有一次请求,而重定向是两次请求:

1c75da05f16fd984f659bd682d9c1cce.png

92d053f1f718f79cfebd27cc49d3d860.png

(2)请求转发:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(ForwardServlet)中的request对象是同一个对象

重定向:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(SendServlet)中的request对象不是同一个对象

8cce7261bf68d477cdea89edf5fb72b3.png

(3)请求转发:地址栏中的url是初次发起请求的地址

重定向:地址栏中的url是最终响应的的那个地址

dccfc44ba07c5188e9b2ccc03db84b27.png

de4576b1f2e3b5add5ac169d34848c3b.png

(3)请求转发:仅限于当前web应用内,"/"代表当前web应用的根目录

请求重定向:可以定向到任何资源,"/"代表当前web站点的根目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值