请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include

当一个 Web资源 收到客户端的请求后,如果希望服务器通知另一个web资源处理请求,那么这时可以通过 RequestDispatcher 接口的实例对象实现。

web资源分为静态和动态

  1. 静态资源
    静态web资源是浏览器能够直接打开的。如:html、css、 js等
  2. 动态资源
    动态web资源是经过翻译之后浏览器能够打开的。如:jsp、servlet、php、ASP等

RequestDispatcher对象

RequestDispatcher getRequestDispatcher (String path)

  1. 参数:path必须以/开头,用于表示当前 Web 应用的根目录

    web应用的根目录在idea中是web;在eclipse中是webcontent

    需要注意的是,WEB-INF目录中的内容对 RequestDispatcher 对象也是可见的。因此,传递给 getRequestDispatcher(String path) 方法的资源可以是 WEB-INF 目录中的文件

  2. 返回值:某条路径所指定资源的 RequestDispatcher 对象

获取到 RequestDispatcher对象后,便是通知其他 Web 资源处理当前的 Servlet 请求,为此,RequestDispatcher 接口定义了两个相关方法:forward()include()


forward()与include()

方法声明功能描述
forward(ServletRequest request, ServletResponse response)第一个web资源对请求做一个初步处理,然后通过调用这个方法,将请求传递给其他资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出 IllegalStateException 异常
include(ServletRequest request, ervletResponse response)该方法用于将其他的资源作为当前响应内容包含进来

forward()
include()

比较内容forward()Include()
使用场合不同将控制权转移到其它组件须由另一组件执行部分处理,一旦执行完毕,当前组件将收回控制权
输出结果不同在请求转发之前,web组件不应使用输出流向客户端发送消息所有web组件共享同一个输出流与客户机进行通信
相同点均是在服务器端完成的,因此地址栏中只显示原URL,不显示跳转后的URL均是在服务器端完成的,因此地址栏中只显示原URL,不显示跳转后的URL


动手练一下吧!

关于requset的forward()、include()跳转的实例代码



参考文章:

  1. RequestDispatcher实现请求转发
  2. 什么是web资源????

版权声明:本文为what_how_why2020原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。