玛沁宠物网

    Servlet中forward和redirect的区别

    发布时间:2019-09-17

    在Servlet中两种实现:
    forward方式:request.getRequestDispatcher("/somePage.jsp").forward(request, response);
    redirect方式:response.sendRedirect("/somePage.jsp");

    forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,畅川扳沸殖度帮砂爆棘客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。

    forward 会将 request state , bean 等等信息带往下一个 jsp
    redirect 是送到 client 端后再一次 request , 所以资料不被保留.
    使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料

    回复:

    简单的说, 就是下个页面要用到当前
    的request对象的值就用forward, 而redirect就是一个超链接的作用.

    回复:

    一起转发到服务器的另外一个servlet去处理,就是将用户的请求,因此访客浏览器的url 是不会发生变化的,仅仅让你的浏览器重新访问一个新的url:
    redirect() 会丢失request的所有信息 它属于页面级的重定向。

    而 RequestDispatcher 的forward() 方法,或者说是透明的,连同请求信息等内容。这一过程是服务器内部完成的,能很明显的看到浏览器url地址的变化,是感觉不到了,作为浏览者,作为访问者,是转发,它不会丢失request信息,需要request 和 response最为参数,这和点击了一个普通的超链接的后果是一样的最明显的区别就是

    回复:

    forward是转发的、可以传递参数、redirect重定向、最简单的转发时地址栏没有变化、重定向地址栏发生变化

    回复:

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

    回复:

    forward 的话,你给服务器发送的是只有一个请求浏览器url不变,redirect 是两次不同的请求浏览器url变

    回复:

    redirect就是单纯的跳转页面
    forward会把request和response对象一起穿到要跳转的页面中去
    也就是可以包括request.setAttribute和session.setAttribute加进去的对象都可以在跳转过去的页面里取出来

    回复:

    redirect是跳转,所以,request的作用范围也没有中断过,由于重新请求了,所以它不需要通过浏览器来请求forward是转发,让浏览器重新向新的地址请求,它的作用范围也失效了,所url地址不会改变。相同点都是为了两个组件之间的相互调用,重新请求了,它的作用域仍然有效,是服务器发送消息告诉浏览器。forward的运行原理是服务器端内部的调用。而redirect是重定向,url地址是会改变的,因而request也中断了,放在request里面的信息也随之而清空了

    回复:

    可以用重定向

    重定向是服务器让客户端(浏览器)重新发送一个定向请求(貌似就是直接改变浏览器地址栏地址),就用转发,redirect是重定向
    具体用什么归结到就一个问题,已经做完了后要跳到另一个组建,要不要数据共享(共享request、servlet等);
    当你在一个servlet中做一件事、response对象)
    当你在一个servlet中做一件事,但事情还没有做完却要跳到另一个组建(可以是jspforward是转发,地址栏不会改变

    啊说了这么多,转发是在服务器内转到另一个组建(但还是原来的请求)

    回复:

    redirect 后,确认了要跳转的页面的 url,继续执行 redirect 下面的代码;执行完后,断开当前的与

    用户所发出的请求连接,即断开 request 的引用指向,因此 request 里存放的 username 信息也会丢失

    ;然后再与用户建立新的请求连接,即创建新的 request 对象,这样 false 页面的通过

    request.getAttribute("user") 就会得到一个 null 值;最终显示的是页面是 false 页面,所以地址栏

    的 url 内容会发生变化。

    forward 后,确认了要跳转的页面的 url,现在停止继续执行后面的代码,而是先执行 success

    (servlet) 里的代码,执行完后再回畅川扳沸殖度帮砂爆棘来继续执行 check 后面的代码;在这期间 check 和 success 共享

    一个 request 和 response 对象,所以 success 页面通过 request.getAttribute("user") 便可以取到

    值;这个过程最后执行的还是 check 页面(即使 forward 后面没有任何代码),所以地址栏的 url 内容

    不会发生变化。

    续:

    有时候会出现这样的两种错误:

    1:
    java.lang.IllegalStateException
    org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)

    2:
    java.lang.IllegalStateException: Cannot forward after response has been committed

    通过上面介绍,不难理解其原因是:前者是 forward 后面的代码还要执行 redirect,后者是 redirect

    后面还要执行 forward。

      上一篇:K剧场版的主题曲和插曲。求告知 下一篇:我要卖奥奇传说号谁买?

      返回主页:玛沁宠物网

      本文网址:http://0975pet.cn/view-48318-1.html
      信息删除