JSP请求转发 和重定向
1,请求的转发与请求重定向
①.请求转发的实现方式
请求转发的实现需要用到RequestDispatcher接口,RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如,Servlet、HTML文件、JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。
RequestDispatcher接口中定义了两个方法:forward方法和include方法。
forward和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对它们进行了包装的ServletRequestWrapper 或ServletResponseWrapper对象
获取RequestDispatcher对象的方法:
A. ServletContext.getRequestDispatcher (参数只能是以“/”开头的路径)
B. ServletContext.getNamedDispatcher
C. ServletRequest.getRequestDispatcher (参数可以是不以“/”开头的路径)
// 请求的转发
// 1.调用HttpServletRequst的getRequestDispatcher();
// 调用getRequestDispatcher()需要闯入转发的地址
String path = "testServlet";
RequestDispatcher requestDispatcher=request.getRequestDispatcher(path);
// 2.调用RequestDispatcher的forward(request,response)
requestDispatcher.forward(request, response);
②请求重定向的实现
// 请求重定向
String path = "testServlet";
response.sendRedirect(path);
- 请求转发和请求重定向的区别
1)本质区别:请求转发只发出一次请求,请求重定向则发了两次请求
A. 请求转发:地址栏时初次发出请求的地址
请求重定向:地址栏不是初次请求的地址。地址栏是最后响应的地址
B. 请求转发:在最终的Servlet中,request对象和中转的request对象是同一个对象
请求重定向:在最终的Servlet中,request对象和中转的request对象不是同一个对象
C. 请求的转发:只能转发给当前WEB应用的根目录
请求重定向:能重定向给任何资源
D.请求的转发: “/”代表的是当前WEB应用的根目录代表的是这个http://localhost:8080/web_name
请求重定向:“/”代表的是当前WEB站点的根目录代表的是这个http://localhost:8080