• JSP 四大域对象


    我们来说说JSP的四大域对象
    首先 我们要了解他们是四种保存范围

    第一种 是 Page范围 只作用于当前界面 只要页面跳转了 其他页面就拿不到了
    第二种 request范围 在一次请求中有效 就是 我们服务端指向某个界面 并传递数据给他 那么 如果你是客户端跳转就不生效了
    第三种 session范围 在一次会话范围中,无论何种跳转都可以使用
    第四种 application范国 只要服务器不关 一直有效

    这边 关于范围的选择 肯定是够用就小 在完成功能需要的前提下 作用域越小越好 比较作用域越大 对性能的消耗就越大
    相对来说 我们jsp一般都是服务端跳转 所有实际开发一般request居多

    我们来写个小案例 我们先在index.jsp同目录下创建一个 page.jsp
    参考代码如下

    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    DOCTYPE html>
    <html>
    <head>
        <title>JSP - Hello Worldtitle>
    head>
    <body>
    <%
        //获取page作用域
        out.print("page获取name1数据: "+ pageContext.getAttribute("name1"));
        //获取request作用域
        out.print("request获取name2数据: "+ request.getAttribute("name2"));
        //获取session作用域
        out.print("session获取name3数据: "+session.getAttribute("name3"));
        //获取application作用域
        out.print("application获取name4数据: "+ application.getAttribute("name4"));
    %>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这里 我们调用四个作用域的 getAttribute 获取对应键为 name 1 2 3 4的数据
    然后通过print 将获取到的内容输出在界面上

    然后 我们index.jsp编写代码如下

    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    DOCTYPE html>
    <html>
    <head>
        <title>JSP - Hello Worldtitle>
    head>
    <body>
    <%
        //设置page作用域
        pageContext.setAttribute("name1","zhangsan");
        //设置request作用域
        request.setAttribute("name2","lisi");
        //设置session作用域
        session.setAttribute("name3","wangwu");
        //设置application作用域
        application.setAttribute("name4","zhoaliu");
    %>
    <jsp:forward page="page.jsp">jsp:forward>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    这里 我们通过四个作用域的 setAttribute 分别定义了 name 1 2 3 4 的值
    然后通过 jsp:forward 进行服务端跳转向 page.jsp
    我们启动项目
    在这里插入图片描述
    我们这里可以看到 处理page 其他都是正常拿到了 page拿到的是个null 因为 我们之前说过 page只作用于当前界面 你只要跳转了 不管是什么跳转方式 他都是拿不到的
    老实说 直接在当前界面定义个属性就好了 所以page用的是非常少的

    然后 我们将 index.jsp代码更改如下

    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    DOCTYPE html>
    <html>
    <head>
        <title>JSP - Hello Worldtitle>
    head>
    <body>
    <%
        //设置page作用域
        pageContext.setAttribute("name1","zhangsan");
        //设置request作用域
        request.setAttribute("name2","lisi");
        //设置session作用域
        session.setAttribute("name3","wangwu");
        //设置application作用域
        application.setAttribute("name4","zhoaliu");
    %>
    <a href="page.jsp">跳转a>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    我们不要那个服务端跳转了 我们用a标签 页面客户端跳转
    进来之后 先点一下我们的a标签 进行跳转
    在这里插入图片描述
    这样 因为他不是服务器跳转 所以我们request就拿不到了
    在这里插入图片描述
    然后 当我们打开另一个浏览器 或者将浏览器关掉再重新打开 直接访问 page.jsp
    那么 session 也就拿不到了
    在这里插入图片描述
    application 相对就比较强大 只要服务开着 他就一直会存在

    相对 request 与 session偏多

  • 相关阅读:
    八、Nacos配置管理(统一配置管理、配置热更新、配置共享)
    【Java面试】反射中,Class.forName和classloader的区别是什么?
    MyBatis-Plus找不到Mapper.xml文件的解决方法
    python BeautifulReport 处理非常规标签输出
    Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能
    【数据结构--八大排序】之快速排序
    wsl2安装百度apollo及其基本配置
    使用vue-sign插件
    12月03日(第五天)
    AtCoder Beginner Contest 258 A~H 题解
  • 原文地址:https://blog.csdn.net/weixin_45966674/article/details/134504484