servlet实现请求转发和请求重定向的特性与区别

本文详细对比了Servlet中的请求转发与请求重定向的区别。请求转发保持同一请求生命周期,而重定向生成新请求。转发只能在同一应用内,重定向则不受限。转发地址不变,重定向则更新为新地址。

今天在复习servlet的基础知识的时候,用到了之前练习中的请求转发,突然注意到一个细节,由此激发了对请求转发和请求重定向的思考,现总结如下:

首先说说请求重定向(请求转发)req.getRequestDispatcher("路径名").forward(req, resp);,示例代码如下:

...
req.getRequestDispatcher(path).forward(req, resp);
System.out.println("成功登录!");
...
上面的语句会将从浏览器端发送过来的请求转发到path指定的路径,此处需要特别注意的是:
-path所指定的路径只能是同一个web应用中的组件;
-使用重定向(请求转发)之后,浏览器地址栏中的地址不会发生改变;
-使用重定向(请求转发)不会直接向浏览器响应,会在重定向完成之后给浏览器响应;
-在执行了上面的请求转发语句之后,后面的打印语句也会执行,显然这是没有意义的,记得使用return语句;
-可以对该请求setAttribure(),然后转发到下一个地方被使用;
-在整个请求过程中,至始至终都只存在一个请求;

再来说说请求转发(重定向)resp.sendRedirect("http://www.baidu.com");,示例代码如下:
...
resp.sendRedirect("http://www.baidu.com");
<pre name="code" class="java">System.out.println("成功登录!");
...

上面的语句会将浏览器的请求重新转发(重定向)到另外一个地址,例如上面的百度主页地址,同样需要注意的是:

-请求转发(重定向)的地址可以是当前web应用中的资源,也可以是其他站点的地址,就像例子里面写的百度首页地址;

-使用请求转发(重定向)之后,地址栏的地址会变成被转发后的地址;

使用请求转发(重定向)会直接给浏览器响应,告诉浏览器去访问新的地址;

-和请求重定向(转发)一样,请求转发语句执行之后,该语句后面的代码会接着执行,显然这是没有意义的,记得使用return语句;

-使用请求转发(重定向)功能时,请求会成为一个新的请求,这时在请求转发之前对请求做的操作,例如setAttribute()将失效;


注:博文中的内容参照了其他博客的内容,在此表示感谢,同时如发现博文中出现错误或不足的地方,欢迎赐教!

不积跬步,无以至千里!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值