请求转发和重定向

5 篇文章 0 订阅

这里就以笔记的形式记录,就不展开讲。便于以后复习。

转发和包含

  1. 概念
    • 请求转发:Servlet源组件先对请求做一些预处理操作,然后把请求转发给其他Web组件(转发的目标组件)来完成包括生成响应结果在内的后续操作
    • 包含:Servlet源组件把其他Web组件生成的响应结果包含到自身的响应结果中
  2. 共同点
    • 源组件和目标组件处理的都是同一个客户端请求,共享同一个ServletRequest对象和ServletResponse对象
    • 目标组件可以是ServletJSPHTML文档
    • 都依赖于javax.servlet.RequestDispatcher接口来转发请求。
  3. 关于javax.servletrequestDispatcher接口

    • javax.servlet.RequestDispatcher是一个请求分发器。
    • 它有两个方法,通过这两个方法来进行请求的转发和包含

      forward() : 把请求转发给目标组件

      方法声明:

        public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.IO.IOException
      

      include() : 包含目标组件的相应结果

      方法声明:

        public void include(ServletRequest request, ServletResponse response) throws ServletException, java.IO.IOException
      
    • 如何获取RequestDispatcher对象

      1. 调用ServletContext对象的getRequestDispatcher(String path)方法,path指定目标组件的路径(绝对路径,由web应用的根目录/开头,必须是绝对路径,否则报错)
      2. 调用ServletRequest对象的getRequestDispatcher(String path)方法,path指定目标组件的路径(相对路径,相对于当前Servlet所在的目录,不以/开头,但是,它还是可以接受绝对的路径的)
    • forward()方法执行的特点:
      • 此方法先清空源组件用于存放响应数据正文的缓冲区(但不会清空HeaderStatuCode)。所以源组件生成的响应结果不会被发送到客户端。
      • 在调用这个方法之前,如果已经提交了源组件的响应结果,会抛出IlleageStaeexception异常。
    • include()方法执行的特点:
      • 此方法执行时,会把目标组件生成的响应结果包含到源组件响应结果中。

重定向

  1. 重定向机制运作流程
    • 用户在浏览器端输入URL,访问特定资源
    • 服务器端返回一个302的状态码和一个URL的响应结果
    • 浏览器根据服务器端返回的URL自动重新向此URL发起请求
    • 浏览器端接收到响应结果
  2. HttpServletResponse接口的重定向方法
    • HttpServletResponsesendRedirect(String location)方法用于把请求重定向
    • 方法中的参数location可以以当前服务器根路径”/”,或者以http://开头,来重定向到本服务器的另一个Servlet或者页面,或者Internet上任意一个有效的页面
    • 在源组件中调用这个方法,那么源组件生成的响应结果,除了一个状态码302和一个重定向的URL,不会发送其他任何响应结果给浏览器,但是在这个方法之后,如果还有代码需要执行,仍然会被执行
    • 这个方法在调用时,一律自动返回状态码302,并且浏览器在收到状态码后,即刻自动重新请求给定的URL
    • 如果在这个方法调用前,源组件提交了响应结果,那么抛出IllegalStateException异常
  3. 特点
    • 重定向实际上是你在访问一个资源时,发送了两次请求,第一次请求,没有获取到需要的资源,服务器只是给你一个URL,让你重新向这个URL再次发起请求,获取资源,不过这次请求是浏览器自动完成的
    • 源组件和目标组件不共享同一ServletRequestServletResponse对象(两次请求)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值