Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同。

一、Servlet的转发

  有两种方式获得转发对象(RequestDispathcer):

  1. HttpServletRequest.getRequestDispathcer();
  2. ServletContext.getRequestDispathcer();

  request.getRequestDispathcer(“test.jsp”).forward(request,response); //转发到test.jsp

  解释:假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用forward()方法,将请求转发给servlet2。但是调用forward()方法,对于浏览器来说是透明的,浏览器并不知道为其服务的Servlet已经换成Servlet2,它只知道发出了一个请求,获得了一个响应。浏览器的URL地址不变

二、Servlet的重定向

  HttpServletResponse.sendRedirect();

  例:HttpServletResponse.sendRedirect("test.jsp"); //重定向到test.jsp

  解释:假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用sendRedirect()方法,将客户端的请求重新定向到Servlet2。接着浏览器访问servlet2,servlet2对客户端请求作出反应。浏览器的URL地址改变

三、转发与重定向的区别

  (1)重定向中的sendRedirect()方法不但可以在位于同一个主机上的不同Web应用程序之间进行重定向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。而转发中的forward()方法只能将请求转发给同一Web应用的组件。

  (2)转发:浏览器的URL地址不变。 

     重定向:浏览器的URL地址改变。

  (3)转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求的。

 

参考博文:

(1)http://www.cnblogs.com/understander/p/5689900.html

(2)http://www.cnblogs.com/LinkinPark/p/5233006.html

(3)http://blog.csdn.net/kittyshanny/article/details/5482442

posted on 2017-10-16 18:44  yanxi1900  阅读(156)  评论(0编辑  收藏  举报