您的位置:首页 > 理论基础 > 计算机网络

HTTP中的重定向和请求转发的区别

2014-11-26 21:46 316 查看

一、调用方式 

1.在servlet中调用请求转发的语句如下:

request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
请求转发允许把请求转发给同一应用程序中的其他Web组件。这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理具体的请求处理操作,并生成响应结果。



   Servlet类使用javax.servlet.RequestDispatcher.forward()方法来转发它所收到的HTTP请求。转发目标组件将处理该请求并生成响应结果,或者将请求继续转发到另一个组件。最初请求的ServletRequest和ServletResponse对象被传递给转发目标组件,这使得目标组件可以访问整个请求上下文。值得注意的是,只能把请求转发给同一Web应用中的组件,而不能转发给其他Web应用的组件。

   如果当前的Servlet组件要把请求转发给一个JSP组件,如hello.jsp,可以在Servlet的service()方法中执行以下代码:

         RequestDispatcher rd = request.getRequestDispatcher("hello.jsp");

         //Forward to requested URL

         rd.forward(request, response);

   在JSP页面中,可以使用<jsp:forward>标签来转发请求,例如:

         <jsp:forward page="hello.jsp">

   对于请求转发,转发的源组件和目标组件共享request范围内的共享数据。

2.在servlet中调用重定向的语句如下:

response.sendRedirect("new.jsp");//重定向到new.jsp

也可以在jsp页面中实现重定向:

<%response.sendRedirect("new.jsp");//重定向到new.jsp%>
Web组件可以将请求重定向到任一URL,而不仅仅是同一应用中的URL。

重定向的源组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。



二、区别

1.重定向访问服务器两次,转发只访问服务器一次。

2.重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。

3.重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了。

4.在request级别使用信息共享,使用重定向必然出错

5.还有一个大的区别就是,重定向可以访问自己web应用以外的资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息