请求转发与请求重定位详解

请求转发与请求重定位基础

请求转发

浏览器接收到客户请求后,通知服务器调用另外一个web资源进行处理.称之为请求转发


代码说明:
1.先要获取context域对象   getServletContext()
2.从域对象中获取转发器   getRequestDispatcher()
3.进行请求转发   forward(request, response)
图形示例

这里写图片描述

demo06
public class Demo06 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("张三找李四借钱");
        System.out.println("李四也没钱,但不和张三说自己没钱,而是自己去找王五借钱");
        ServletContext context = this.getServletContext();
        RequestDispatcher dispatcher = context.getRequestDispatcher("/demo07");
        dispatcher.forward(request, response);
        System.out.println("李四借完钱给张三了,张三不知道李四是找王五借的");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
demo07
public class Demo07 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("李四借完钱给张三了,张三不知道李四是找王五借的");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
结果截图

这里写图片描述

请求重定位

浏览器接收到客户请求后,返回在返回响应中会携带一个重定位响应头(头中有重定位访问网址)
浏览器接收到这个响应后 发现重定向头 
再一次发起请求 去访问重定向头中的地址

代码解释:
1.添加重定向响应头   response.setHeader("location", "/sh-web-servlet03/demo08")
2.添加重定向状态码   response.setStatus(302)
图形示例

这里写图片描述

demo06
public class Demo06 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("张三找李四借钱");
        System.out.println("李四也没钱,把王五的地址给张三,让张三去找王五借钱");
        response.setHeader("location", "/sh-web-servlet05/demo07");
        response.setStatus(302);
        System.out.println("张三拿到李四给的地址,去找王五了");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
demo07
public class Demo07 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("王五见到了张三,并把钱借给了张三");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
结果截图

这里写图片描述

web.xml

 <servlet>
        <servlet-name>demo06</servlet-name>
        <servlet-class>com.lanou3g.Demo06</servlet-class>
  </servlet>
  <servlet-mapping>
        <servlet-name>demo06</servlet-name>
        <url-pattern>/demo06</url-pattern>
  </servlet-mapping>

  <servlet>
        <servlet-name>demo07</servlet-name>
        <servlet-class>com.lanou3g.Demo07</servlet-class>
  </servlet>
  <servlet-mapping>
        <servlet-name>demo07</servlet-name>
        <url-pattern>/demo07</url-pattern>
  </servlet-mapping>

转发与重定向区别

1.请求转发:用户只请求了一次,剩余的请求是服务器自己做的,用户不知道共
请求了多少次
 请求重定向:用户请求了多次,服务器只负责将网址告诉用户,还是要用户自己
去访问
2.请求转发:服务器行为,request.getRequsetDispatcher().forward(requset,response);
  是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变(服
  务器内部转发,所有客户端看不到地址栏的改变)

  请求重定向:客户端行为,从本质上讲等同于两次请求,前一次的请求对象不会保持,
  地址栏的URL地址会改变
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值