当一个 Web资源
收到客户端的请求后,如果希望服务器通知另一个web资源处理请求,那么这时可以通过 RequestDispatcher
接口的实例对象实现。
web资源分为静态和动态
- 静态资源
静态web资源是浏览器能够直接打开的。如:html、css、 js等- 动态资源
动态web资源是经过翻译之后浏览器能够打开的。如:jsp、servlet、php、ASP等
RequestDispatcher对象
RequestDispatcher getRequestDispatcher (String path)
参数:
path
必须以/
开头,用于表示当前 Web 应用的根目录web应用的根目录在idea中是
web
;在eclipse中是webcontent
需要注意的是,
WEB-INF
目录中的内容对RequestDispatcher
对象也是可见的。因此,传递给getRequestDispatcher(String path)
方法的资源可以是WEB-INF
目录中的文件返回值:某条路径所指定资源的
RequestDispatcher
对象
获取到 RequestDispatcher
对象后,便是通知其他 Web 资源处理当前的 Servlet
请求,为此,RequestDispatcher
接口定义了两个相关方法:forward()
、include()
forward()与include()
方法声明 | 功能描述 |
---|---|
forward(ServletRequest request, ServletResponse response) | 第一个web资源对请求做一个初步处理,然后通过调用这个方法,将请求传递给其他资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出 IllegalStateException 异常 |
include(ServletRequest request, ervletResponse response) | 该方法用于将其他的资源作为当前响应内容包含进来 |
比较内容 | forward() | Include() |
---|---|---|
使用场合不同 | 将控制权转移到其它组件 | 须由另一组件执行部分处理,一旦执行完毕,当前组件将收回控制权 |
输出结果不同 | 在请求转发之前,web组件不应使用输出流向客户端发送消息 | 所有web组件共享同一个输出流与客户机进行通信 |
相同点 | 均是在服务器端完成的,因此地址栏中只显示原URL,不显示跳转后的URL | 均是在服务器端完成的,因此地址栏中只显示原URL,不显示跳转后的URL |
动手练一下吧!
关于requset的forward()、include()跳转的实例代码
参考文章:
版权声明:本文为what_how_why2020原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。