javaweb学习18:JSP内置对象及作用域

javaweb学习18:JSP内置对象及作用域

  • JSP:9大内置对象

    • PageContext:存东西

    • Request:存东西

    • Response

    • Session:存东西

    • Application:【ServletContext】:存东西

    • config:【ServletConfig】

    • out

    • page:几乎不用

    • Exception:跟Java异常一样;

 

  • 使用场景:

    • Request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻;

    • Session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;Hystrix

    • Application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用;比如聊天数据;

 

  • 总结:

    • 参数的作用域范围:参考:Java双亲委派机制;

    • JVM:双亲委派机制;

 

  • 分析代码:pageContext.setAttribute( );

    //PageContext类:
    public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;

    //setAttribute源码
    public void setAttribute(String name, Object attribute, int scope) {
       switch(scope) {
           case 1:
               this.mPage.put(name, attribute);
               break;
           case 2:
               this.mRequest.put(name, attribute);
               break;
           case 3:
               this.mSession.put(name, attribute);
               break;
           case 4:
               this.mApp.put(name, attribute);
               break;
           default:
               throw new IllegalArgumentException("Bad scope " + scope);
      }

    }

     

 

  • 代码案例:重要

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    <body>

    <%--内置对象:一般用来存东西--%>

    <%
       pageContext.setAttribute("name1","张三1");//保存的数据只在一个页面中有效;
       request.setAttribute("name2","张三2");//保存的数据只在一次请求中有效;(请求转发会携带整个参数)
       session.setAttribute("name3","张三3");//保存的数据只在一次会话中有效;从打开浏览器到关闭浏览器;
       application.setAttribute("name4","张三4");//保存的数据只在服务器中有效;从打开服务器到关闭服务器;
    %>

    <%--脚本片段中的代码,会被原封不动的生成到.JSP.java中 --%>
    <%

       //通过pageContext取出,我们通过寻找的方式来 findAttribute
       //从底层到高层(作用域):page-->reques-->session-->application
       //JVM:双亲委派机制:
       String name1 = (String)pageContext.findAttribute("name1");
       String name2 = (String)pageContext.findAttribute("name2");
       String name3 = (String)pageContext.findAttribute("name3");
       String name4 = (String)pageContext.findAttribute("name4");
       String name5 = (String)pageContext.findAttribute("name5");//不存在

    %>

    <%--找到之后怎么输出:使用EL表达式输出: ${ }
       EL表达式:${ } 等价于  JSP表达式:<%= %>
    --%>

    <h1>取出的值为:</h1>
    <h3>${name1}</h3>
    <h3>${name2}</h3>
    <h3>${name3}</h3>
    <h3>${name4}</h3>
    <h3>${name5}</h3>

    <%-- null --%>
    <h3><%= name5%></h3>

    </body>
    </html>

     

  • 代码案例2:分析作用域底层

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    <body>
       
    <%
       pageContext.setAttribute("hello1","hello1",PageContext.SESSION_SCOPE);
       //session.setAttribute("hello1","hello1");

    %>


    </body>
    </html>

     

  • 代码案例:页面跳转

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    <body>

    <%
       //实现页面转发:虽然页面跳转,但是地址栏不变
       pageContext.forward("/index.jsp");
       //request.getRequestDispatcher("/index.jsp").forward(request,response);

    %>


    </body>
    </html>

     

 

 

 

 

posted @   gzs1024  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示