请求的重定向与请求转发

  • RequestDispatcher接口
  • RequestDispatcher接口的理论知识
  • 用forward方法实现请求转发
  • 用sendRedirect方法实现请求重定向
  • forward()方法和sendRedirect方法的区别

RequestDispatcher接口

RequestDispatcher接口的理论知识

  • RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如Servlet,HTML文件,JSP文件),并可以通过其中的方法将客户端的请求转发给所包装的资源
  • RequestDispatcher接口中定义了两个方法:forward方法和include方法
  • forward方法和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象。
  • 获取RequestDispatcher的方法
    – ServletContext.getRequestDispatcher(参数只能是以“/”开头的路径)
    – ServletRequest.getRequestDispatcher(参数可以是不以“/”开头的路径)
    – ServletContext.getNamedDispacher

用forward方法实现请求转发

测试forward方法

首先建立一个html,其中有一个超链接跳转到forwardServlet。

DescribeInstancesRequest 请求参数设置 Java_重定向


在ForwardServlet中写下响应,并用forward方法跳转至TestServlet处

DescribeInstancesRequest 请求参数设置 Java_转发和重定向_02


tsetServlet的service方法打印接受的请求

DescribeInstancesRequest 请求参数设置 Java_重定向_03


运行结果

DescribeInstancesRequest 请求参数设置 Java_请求转发_04

用sendRedirect方法实现请求重定向

DescribeInstancesRequest 请求参数设置 Java_转发和重定向_05


运行结果

DescribeInstancesRequest 请求参数设置 Java_转发和重定向_06

forward()方法和sendRedirect方法的区别

  1. forward()方法执行以后,网址不变,只向服务器发送了一次请求,sendRedirect()方法执行以后,网址改变,向服务器发送了两次请求
    在谷歌浏览器中运行可以知道,forward()只有一次请求

    redirect有两次请求
  2. 请求转发:在最终的Servlet中,request对象和中转的那个request是同一个对象;请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象
  3. 请求转发:只能转发给当前WEB应用的资源;重定向:可以重定向到任何资源。
    例子:
  4. 点击之后发现
  5. 如果用gerResquestDispatcher()的话,那么会是
  6. ==请求的转发:/ 代表的是当前WEB应用的根目录,加上了工程名即http://localhost:8080/test7/;请求的重定向,/代表web站点的根目录,即http://localhost:8080