一、调用方式
1.在servlet中调用请求转发的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
请求转发允许把请求转发给同一应用程序中的其他Web组件。这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理具体的请求处理操作,并生成响应结果。
![o_1.JPG](https://i-blog.csdnimg.cn/blog_migrate/59e806216137394ebded982ff42ac13c.jpeg)
如果当前的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范围内的共享数据。
![o_2.JPG](https://i-blog.csdnimg.cn/blog_migrate/be6dd4e536706ada7fbeeed4a6422ac3.jpeg)
二、区别
1.重定向访问服务器两次,转发只访问服务器一次。
2.重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。
3.重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了。
4.在request级别使用信息共享,使用重定向必然出错
5.还有一个大的区别就是,重定向可以访问自己web应用以外的资源