今天在复习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");
<pre name="code" class="java">System.out.println("成功登录!");...
上面的语句会将浏览器的请求-请求转发(重定向)的地址可以是当前web应用中的资源,也可以是其他站点的地址,就像例子里面写的百度首页地址;
-使用请求转发(重定向)之后,地址栏的地址会变成被转发后的地址;
使用请求转发(重定向)会直接给浏览器响应,告诉浏览器去访问新的地址;
-和请求重定向(转发)一样,请求转发语句执行之后,该语句后面的代码会接着执行,显然这是没有意义的,记得使用return语句;
-使用请求转发(重定向)功能时,请求会成为一个新的请求,这时在请求转发之前对请求做的操作,例如setAttribute()将失效;
注:博文中的内容参照了其他博客的内容,在此表示感谢,同时如发现博文中出现错误或不足的地方,欢迎赐教!
不积跬步,无以至千里!

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


被折叠的 条评论
为什么被折叠?



