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


    转发与重定向

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

      • 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

  • 相关阅读:
    RabbitMQ的介绍
    Spring中的IOC控制翻转容器使用与总结
    线程池的运行逻辑与你想象的不一样,它是池族中的异类
    TCL 学习笔记
    请求DNS查找的host命令示例
    JavaEE-http/https/Tomcat(上)
    Java并发进阶之:关于计算机的一些知识
    MySQL数据库——MySQL日志及分类
    【全网首发】2023年NOIP真题
    数据结构与算法之LeetCode-1224. 最大相等频率 - 力扣(LeetCode)
  • 原文地址:https://blog.csdn.net/m0_70083523/article/details/126987507