请求重定向和请求转发的区别

来源:互联网 发布:知更 杨千嬅 编辑:程序博客网 时间:2024/06/03 14:32
1.区别

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;

而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。 


如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于服务器的根目录;

如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。 


调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;

调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。


HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;

RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。 


RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;

HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。 

2.应用场景
减少服务器压力
当需要更新地址栏时用请求重定向,如注册成功后跳转到主页。
当需要刷新更新操作时用请求重定向,如购物车付款的操作。

常用地址的写法:
                 
    绝对路径:以/开头的路径就叫做绝对路径,绝对路径在相对于的路径上直接拼接得到最终的路径
    相对路径:不以/开头的路径就叫做相对路径,相对路径基于当前所在的路径计算的到最终的路径
    硬盘路径:以盘符开头的路径就叫做硬盘路径.是哪个路径就是哪个路径.没有相对于谁的问题


    虚拟路径: --写虚拟路径时都使用绝对路径
        如果路径是给浏览器用的,这个路径相对于虚拟主机,所以需要写上web应用的名称
        如果路径是个服务器用的,这个路径相对于web应用,所以可以省写web应用的名称
      <a href="/Day04/.....">
      <form action="/Day04/...">
      <img src="/Day04/....">
      response.setHeader("Location","/Day04/....");
      response.setHeader("refresh","3;url=/Day04/...");
      response.sendRedirect("/Day04/...");
      request.getRequestDispathce("/index.jsp").forward();
      request.getRequestDispathce("/index.jsp").include();
   
   
    真实路径: --写真实路径时都使用相对路径
        根据原理,具体问题具体分析
        
        servletContext.getRealPath("config.properties");//--给一个相对于web应用目录的路径
        classLoader.getResource("../../config.properties");//--给一个相对于类加载目录的路径
        
        File file = new File("config.properties");//--相对于程序的启动目录
        new InputStream("config.properties");//--相对于程序的启动目录
0 0
原创粉丝点击