request.getRequestDispatcher().forward() 和response.sendRedirect()区别

在进行请求的处理时,有两种方法进行页面转发,一种是用request.getRequestDispatcher().forward方法,另外一种方法是response.sendRedirect方法,这两种方法有什么不同呢,下面结合实例进行说明。

实例:

用户登录模块

login.jsp

loginServlet.java

loginOK.jsp

用户访问login.jsp,输入用户名和密码进行登录,请求到达loginServlet,loginServet中,在session中加入user属性,值为输入的用户名。接着loginServlet把请求转发给loginOK.jsp,loginOK.jsp显示用户名。

 

代码简单描述(注意颜色的对应):

login.jsp中:
username=ethen,password=pwd;


loginServlet.java中:
String user=request.getParameter("username");
session.setAttribute("user",user);

loginOK.jsp中:

显示request中的用户名 ${param["username"},

显示session中的用户名 ${sessionScope["user"]}。

 

第一种情况:

由loginServlet调用forward方法进行转发,首先观察浏览器的地址栏,发现了地址是形如http://.../login.do?username=..&..的样子的。页面中的request里的用户名和session的用户名都显示了出来。

 

第二种情况:

由loginServlet调用sendRedirect方法进行转发,还是观察地址栏,发现地址已经变成http://.../loginOK.jsp了,

页面中request里面的用户名没有显示出来,但是session里的用户名却显示了出来。

这是为什么呢?

 

原来,forward 是服务器端的跳转,也就是客户端根本不知道这个动作,也就是从一个java程序,转到了另一个java程序,所以此时request会被作为参数传递过去。
但是,sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,所以此时,request已经无效了。当然,此时session还是生效的。

 

现在你明白了么?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值