• 转发和重定向的过程和区别


    转发  req.getRequestDispatcher("/要跳转的地址").forward(req, resp);

    转发的过程:(以servlet和jsp为例)

    浏览器首先发送一个请求到服务器端,服务器端发现匹配的 servlet,并指定它去执行,当这个 servlet 执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp页面,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此 servlet 和 jsp 共享的是同一个request,在 servlet 里面存放的所有东西,在jsp页面中都能取出来。整个过程是一个请求,一个响应。

    易错点:

    a)地址栏不会改变

    b)转发只能转发到当前web应用内的资源

    c)在转发过程中,可以把数据保存到request域对象中(因为转发使用同一个request域)

    d)转发是在服务器端的跳转,浏览器并不知情

    重定向  resp.sendRedirect("/要跳转的地址");

    重定向的过程:(以servlet和jsp为例)

    浏览器发送一个请求到服务器端,服务器端匹配servlet,这都和请求转发一样,servlet 处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以当这个servlet处理完之后,看到response.senRedirect()方法,立即向浏览器返回这个响应(包含响应报头和新的URL地址),响应告诉浏览器你必须要再发送一个请求,去访问 jsp页面,紧接着浏览器收到这个请求后,立刻又重新发出一个新的请求,去请求 jsp页面。这两个请求互不干扰,相互独立,在前面request里面 setAttribute() 的任何东西,在后面的request里面都获取不了。可见,在重定向里面是两个请求,两个响应。

    易错点:

    a)地址栏会改变,变成重定向后的地址

    b)重定向可以跳转到当前web应用或其他web应用,甚至是外部域名网站

    c)不能在重定向的过程中,把数据保存到request中(因为发送第二个request请求时,第一个的request域会失效)

    d) 重定向是在浏览器的跳转,浏览器知情

    转发和重定向的区别:

    转发是在服务器端的跳转,就是浏览器向服务器发送一个请求,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理。而重定向是在浏览器的跳转,服务器会返回给浏览器一个响应报头和新的URL地址,原来的参数或者其他的一些信息,如果服务器端没有特别处理就不存在了,浏览器会访问新的URL所指向的servlet 或 jsp。

    注意点如果要使用request域对象进行数据共享,只能使用转发!!!

  • 相关阅读:
    C#自带的Version判断版本号的大小
    通过iis启动服务,会产生C:/inetpub/logs/logsFile产生大量的日志,定期清理
    C# 需要引用MySql.Data.dll,请在Nuget安装最新稳定版本,如果有版本兼容问题请先删除原有引用 (SqlSugar)
    C# sqlsugar依赖引用报错的问题解决
    Python 函数
    Python 迭代器与生成器
    Python 循环语句
    Python 条件控制
    Python 编程第一步
    Python 列表复制
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309486.html
Copyright © 2020-2023  润新知