zoukankan      html  css  js  c++  java
  • 用forward和sendRedirect转发时的区别

         forward和sendRedirect是用来转发页面的,或者说是跳转到别的页面时所采用的俩种方法。当servlet处理完一次请求时,对客户端做出的响应是让其跳转到某一页面,这时可以采用这俩种方法:

    (1)forward

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             // TODO Auto-generated method stub
             RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");  //创建一个转发器对象,转发到hello.jsp页面
             rd.forward(request,response);                                    //forward方式转发,并将request请求参数传过去
     }

    这种方式的原理是:首先客户端向servlet发送一个请求,servlet收到请求后,将此请求转发到hello.jsp页面,然后由hello.jsp做出响应展现到客户端浏览器,即:

    1、客户端只是向服务器发送了一次request请求。因此此时servlet和hello.jsp中的request是相同的一个,可以通过request内部对象传送数据,而不需要用到session会话。

    2、在客户端的浏览器的地址栏中地址始终不变,始终都是发送一次请求时的地址。

    3、使用这种内部转发时,转发地址只能是站内地址,即本工程内的网页。

    (2)sendRedirect

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
             response.sendRedirect("hello.jsp");     //做出响应重定向为hello.jsp
    }

    这种方式的原理是:首先客户端向servlet发送了一个请求,servlet收到请求后,对客户端做出响应:我不能处理这个请求,你去请求hello.jsp吧,于是客户端向hello.jsp发送请求,然后由hello.jsp做出响应展现到客户端,即:

    1、客户端向服务器发送了俩次request请求,此时servlet和hello.jsp中是俩个不同request请求对象,若这俩者之间需要传递数据只能采用作用域对象大于request的内部对象,即session、application。

    2、在客户端的地址栏中地址是变化的,第一次是发送请求给servlet的地址,第二次是发送给hello.jsp的地址。

    3、使用这种重定位方式转发时,地址可以是站外地址,即可以是本工程内的网页,也可以是网络上其他网页。

       简单来说这俩种转发方式的原理类似这样:

     1、老师提问小明起来回答问题,但小明不会,于是问了问同桌小白答案,然后告诉老师。

     2、老师提问小明起来回答问题,但小明不会,于是小明告诉老师:我不会,你问我同桌小白吧。于是老师提问了小白,小白将答案告诉老师。

  • 相关阅读:
    JS使用 popstate 事件监听物理返回键
    JQ判断div是否隐藏
    SQL Server DATEDIFF() 函数
    取消a或input标签聚焦后出现虚线框
    C#定时任务
    C# 保留N位小数
    C#打印单据
    SQL语句创建函数
    SVN检出新项目
    解决jQuery的toggle()的自动触发问题
  • 原文地址:https://www.cnblogs.com/llsq/p/8313276.html
Copyright © 2011-2022 走看看