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

来源:互联网 发布:天天炫舞抽坐骑软件 编辑:程序博客网 时间:2024/05/01 10:41

今天在复习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()将失效;


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

不积跬步,无以至千里!

0 0