• 转发与重定向、四大作用域


    转发与重定向

    • 转发(携带参数进行跳转)

      • RequestDispatcher对象

      • forward()方法

        1、request.getRequestDispatcher("url").forward(request, response)  request设置属性的
        2、
        
        • 1
        • 2
    • 重定向:将用户请求重新定位到一个新的URL

      response.sendRedirect("url")
      
      • 1

    getParameter: 从请求里面拿参数;返回String类型

    getAttribute:从属性拿参数;返回Object类型(toString())

    转发与重定向的区别:

    1. 转发url没有发生变化,而重定向会
    2. 转发不会重新发送请求,重定向会
    3. 转发可以携带参数,而重定向不可以
    4. 转发只可跳转当前项目路径,而重定向可以跳转任意url
    比较项转发重定向
    URL变化
    重新发出请求不会(地址栏路径不变,内容改变)
    是否携带请求
    目标URL要求仅本Web应用任意URL

    四大作用域:

    • pageContext对象

    如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量

    ---A页面:
    <%pageContext.setAttribute("uname", "page只在当前jsp页面里");
    ---A页面输出,B页面null%>
    <%=pageContext.getAttribute("uname")%>
    
    • 1
    • 2
    • 3
    • 4
    • request对象

    如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。

    所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过 程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

    ✔使用转发到B.jsp【http://localhost:8080/web01/A.jsp,状态栏路径】,重定向就不是本次请求

    ---A页面:
    <%request.setAttribute("uname", "request本次请求周期");%>
    request.getRequestDispatcher("B.jsp").forward(request, response);	
    %>
    ---B页面输出:
    <%=request.getAttribute("uname")%>
    
    <%
    //B页面再次转发,即A直接到C
    request.getRequestDispatcher("C.jsp").forward(request, response); 
    %>
    ---C页面输出,
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • session对象

    如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。

    即:只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。

    ---A页面:
    <%
    session.setAttribute("uname", "session是当前会话(浏览器不关)");	
    response.sendRedirect("B.jsp");  //两次请求
    
    //输出sessionID
    out.println(session.getId());
    
    //设置60秒非session活动时间后清除session中的值
    session.setMaxInactiveInterval(60);
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    ---B页面:
    <%=session.getAttribute("uname")%>
    
    ---C页面清除session:
    <%
    out.print("清除session");
    //单个清除
    session.removeAttribute("uname");
    //清除所有session失效
    session.invalidate();
    %> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • application对象

    如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。

    application作用域里的变量,存活时间最久,需手动删除,否则一直存在。

    application里的变量可以被所有用户共用。如果用户甲的操作修改;application中的变量,用户乙访问时得到的是修改后的值。

     //存入值
    application.setAttribute("name","张三");
     //获取值
    String name = application.getAttribute("name").toString();
    
    • 1
    • 2
    • 3
    • 4

  • 相关阅读:
    基于JAVA+SpringBoot+Mybatis+Vue+MYSQL的智慧养老管理系统
    互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析
    Springboot 多模块项目集成Jacoco统计单元测试覆盖率
    PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构
    Elasticsearch-03-JavaApi以及springboot中操作-RestHighLevelClient
    Java证明尼科梅彻斯定理
    android 消除字体上下间距
    Nest基础学习
    蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇
    果然,有奶就是任性,宝宝为什么突然只吃一边的母乳?原因真特别
  • 原文地址:https://blog.csdn.net/m0_70083523/article/details/126987507