Request_请求转发
请求转发: 一种在服务器内部的资源跳转方式
(一)步骤:
- 通过request对象获取请求转发器对象
- 通过request对象调用getRequestDispatcher(String path)方法就能获取到请求转化器对象
- 这个方法的参数就是我们想要将请求转发到的目标位置的访问路径
- 使用RequestDisPatcher对象来进行一个转发, 通过请求转发器对象RequestDispacher类的实例调用: forward(ServletRequest request, ServletResponse response)
- 我们可以发现这个forward()转发方法中要传入一个request对象和一个response对象, 所以我们转发的时候就只需要从开始的位置开始,将我们的service()方法或者doXxx()方法中的两个形参位置的request对象和response对象传输到我们的请求转发器的forword()方法中即可
- 因为最开始的时候我们肯定是从某个Servlet类开始接受到请求, 那么这个Servlet类要么就是通过实现Servlet接口, 或者就是通过继承HttpServlet实现类的方式创建的, 那么也就是这个Servlet类要么就是重写的service()方法, 要么就是重写的doXxx()方法, 所以我们只需要将这个service()方法中的或者doXxx()方法中的两个参数进行一个传递即可
(二)特点:
- 浏览器地址栏的路径不会发生变化
- 比如: 我们假如先访问了服务器中的AServlet, 然后将请求从AServlet中转发到了BServlet中, 这个时候即使我们已经是将请求转发到了BServlet中, 此时我们已经是Servlet中的service()方法或者是doXxx()方法在操作了, 但是这个时候浏览器中的地址栏中还是我们访问AServlet的访问路径
- 只能转发到当前的服务器内部资源中
- 如果我们通过我们自己的服务器中的AServlet中向百度服务器中转发访问请求的时候就会访问不到, 会提示404, 访问不到
- 转发是一次请求
- 我们可以在开发者工具的NetWork中看抓包工具,我们请求之后是只会抓到一个包的, 无论在服务器内部转发了多少次都还是一次请求, 那么也就只有一个包
请求转发图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKsctrz4-1655913621000)(E:\非凡英才\JavaWeb开发\Servlet\图解\请求转发图解.png)]
上面就是浏览器向服务器发送了一个请求, 开始的时候是先向AServlet中发送了一个请求, 由AServlet中解决了部分问题之后再将这个请求转发到BServlet中, 由BServlet来完成剩余的部分任务
- 那么我们可不可以直接就使用一个Servlet类来解决整个请求问题 ?
- 其实也是可以的, 但是这样并不符合我们的实际开发的情况, 我们在实际开发中都是要将功能尽量的细化, 要实现模块化编程, 才能利于后期维护, 如果将所有的实现放到一个Servlet类中, 那么维护起来会很麻烦
单词积累:
dispathcer : 分配器 , 调度员
















