RequestDispatcher 接口只有两个方法。
forward(ServletRequest request, ServletResponse response) 。
include(ServletRequest request, ServletResponse response) 。
forward:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件,这个方法必须在响应被提交给客户端之前调用,否则抛出异常。方法调用后在响应中的没有提交的内容被自动消除。
include:用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。
forward方法和include方法的区别:
forward跳转则后面的response输出则不会执行
include来跳转,则include的servlet执行完后,再返回到原来的servlet执行response的输出(如果有)
例:
servlet A
RequestDispatcher disp = request.getRequestDispatcher("B");
disp.forward(request, response);
System.out.println("servlet A completed");
PrintWriter pw = response.getWriter();
pw.println("servlet A");
servlet B
PrintWriter pw = response.getWriter();
pw.println("servlet B");
输出结果:
控制台:servlet A completed
页面:servlet B
如果将forward换成include的话,则结果为:
控制台:servlet A completed
页面:servlet B servlet A
PS:如果在servlet B里吧pw给close掉了的话,那servlet A 这里就无法输出了,则结果就和第一个一样。
如何得到RequestDispatcher对象
1、利用ServletRequest接口中的getRequestDispatcher(String path)方法。
2、ServletContext接口中getNamedDispatcher(String path)和getRequestDispatcher(String path)方法。
ServletRequest接口和ServletContext接口中getRequestDispatcher的区别
1、参数的区别
ServletContext接口的中参数路径必须以“/”开始,只能使用绝对路径
ServletRequest接口中的参数路径可以使用相对路径。
2、跨WEB应用程序访问资源
通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来 调用getRequestDispatcher(String path)方法将请求转发到另个WEB应用程序的资源。还需要在当前WEB应用程序配置中设置<context>元素,指定crossContext属性值为true。
ServletResqonse接口中的sendRedirect()方法和forward()方法的区别
sendRedirect()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。
3,客户端浏览器访问Servlet2.
4,Servlet2对客户端浏览器做出响应。
forward()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet1调用forward()方法,将请求转发给Servlet2来处理请求,为客户端服务。
3,Servlet2对客户端浏览器做出响应。
区别:
1、
sendReadirect()方法是重新定位到另外一个资源来处理请求,URL会重新定位,让客户端重新访问另外一个资源。
forward()方法是转发到另外一个资源来处理请求。URL不会变化。隐藏了处理对象的变化。
2、
sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。
forward()方法只能在应用程序内部转发。
3、
sendRedirect()是重新定向,前后页面不是一个request。
forward()是请求转发,前后页面共享一个request 。
4、
sendRedirect()是通过向客户浏览器发送命令来完成。
forward()是在服务器端运行。
forward(ServletRequest request, ServletResponse response) 。
include(ServletRequest request, ServletResponse response) 。
forward:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件,这个方法必须在响应被提交给客户端之前调用,否则抛出异常。方法调用后在响应中的没有提交的内容被自动消除。
include:用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。
forward方法和include方法的区别:
forward跳转则后面的response输出则不会执行
include来跳转,则include的servlet执行完后,再返回到原来的servlet执行response的输出(如果有)
例:
servlet A
RequestDispatcher disp = request.getRequestDispatcher("B");
disp.forward(request, response);
System.out.println("servlet A completed");
PrintWriter pw = response.getWriter();
pw.println("servlet A");
servlet B
PrintWriter pw = response.getWriter();
pw.println("servlet B");
输出结果:
控制台:servlet A completed
页面:servlet B
如果将forward换成include的话,则结果为:
控制台:servlet A completed
页面:servlet B servlet A
PS:如果在servlet B里吧pw给close掉了的话,那servlet A 这里就无法输出了,则结果就和第一个一样。
如何得到RequestDispatcher对象
1、利用ServletRequest接口中的getRequestDispatcher(String path)方法。
2、ServletContext接口中getNamedDispatcher(String path)和getRequestDispatcher(String path)方法。
ServletRequest接口和ServletContext接口中getRequestDispatcher的区别
1、参数的区别
ServletContext接口的中参数路径必须以“/”开始,只能使用绝对路径
ServletRequest接口中的参数路径可以使用相对路径。
2、跨WEB应用程序访问资源
通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来 调用getRequestDispatcher(String path)方法将请求转发到另个WEB应用程序的资源。还需要在当前WEB应用程序配置中设置<context>元素,指定crossContext属性值为true。
ServletResqonse接口中的sendRedirect()方法和forward()方法的区别
sendRedirect()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。
3,客户端浏览器访问Servlet2.
4,Servlet2对客户端浏览器做出响应。
forward()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet1调用forward()方法,将请求转发给Servlet2来处理请求,为客户端服务。
3,Servlet2对客户端浏览器做出响应。
区别:
1、
sendReadirect()方法是重新定位到另外一个资源来处理请求,URL会重新定位,让客户端重新访问另外一个资源。
forward()方法是转发到另外一个资源来处理请求。URL不会变化。隐藏了处理对象的变化。
2、
sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。
forward()方法只能在应用程序内部转发。
3、
sendRedirect()是重新定向,前后页面不是一个request。
forward()是请求转发,前后页面共享一个request 。
4、
sendRedirect()是通过向客户浏览器发送命令来完成。
forward()是在服务器端运行。