• JSP 表达式语言2


    Expression Language 获取域中存储的值

    1. el表达式只能从域对象中获取值

    2. 语法1:

      • ${域名称.键名}:从指定域中获取指定键的值

        pageScope		--> pageContext
        requestScope 	--> request
        sessionScope 	--> session
        applicationScope --> application(ServletContext)
        
      • 举例:

        <body>
            <%
                // 在域中存储数据
                request.setAttribute("name1", "LeeHua");
                session.setAttribute("name2", "Rainbow");
            %>
        
            <h3>获取域中的数据</h3>
            ${requestScope.name1}
            <br>
            ${sessionScope.name2} 
        </body>
        
      • 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo01.jsp

        ![image-20200607000424239](/Users/liyihua/Library/Application Support/typora-user-images/image-20200607000424239.png)

    3. 语法2:

      • ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

      • 举例:

        <body>
            <%
                // 在域中存储数据
                request.setAttribute("name", "request_LeeHua");
                session.setAttribute("name", "session_Rainbow");
            %>
        
            <h3>获取域中的数据</h3>
            ${name}
        </body>
        

        依次从page --> request --> session --> application 中查找,找到name,就返回其值,没找到就返回null

      • 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo02.jsp

        ![image-20200607001050435](/Users/liyihua/Library/Application Support/typora-user-images/image-20200607001050435.png)


    Expression Language 获取域中存储的对象值

    获取对象、List集合、Map集合的值。

    1. 获取对象:${域名称.键名.属性名}

      1. 创建一个Users对象

        public class Users {
            private String name;
            private String password;
            private Date date;
        
            public Users() { }
        
            public Users(String name, String password, Date date) {
                this.name = name;
                this.password = password;
                this.date = date;
            }
        
            /** 逻辑视图 @return 对date进行格式化,如果date为null,返回"",如果不为null,返回自定义格式的日期 */
            public String getDateSimple() {
                return date == null ? "" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
            }
        
            public String getName() { return name; }
        
            public void setName(String name) { this.name = name; }
        
            public String getPassword() { return password; }
        
            public void setPassword(String password) { this.password = password; }
        
            public Date getDate() { return date; }
        
            public void setDate(Date date) { this.date = date; }
        }
        
      2. ExpressionLanguageDemo03.jsp

        <body>
        
            <%
                Users me = new Users();
                me.setName("LeeHua");
                me.setPassword("love");
                me.setDate(new Date());
                request.setAttribute("me", me);
        
                Users she = new Users();
                she.setName("Rainbow");
                she.setPassword("1314");
                she.setDate(new Date());
                request.setAttribute("she", she);
            %>
        
            <h3>在request域中,获取对象中的值</h3>
            ${requestScope.me.name}<%=" "%>
            ${requestScope.me.password}
            ${requestScope.she.name}<%=" "%>
            ${requestScope.she.password}
        
            <h3>在request域中,获取对象中的值</h3>
            ${me.name}<%=" "%>
            ${me.password}
            ${she.name}<%=" "%>
            ${she.password}
        
            <h3>在request域中,获取对象中的值</h3>
            ${me.date}<br>
            ${she.dateSimple}
        
        </body>
        
      3. 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo03.jsp

        20200607014154

    2. 获取List集合:${域名称.键名[索引]}

      1. 这里也是用上面的Users对象

      2. ExpressionLanguageDemo04.jsp

        <body>
            <%
                Users me = new Users();
                me.setName("LeeHua");
                me.setPassword("love");
                me.setDate(new Date());
        
                Users she = new Users();
                she.setName("Rainbow");
                she.setPassword("1314");
                she.setDate(new Date());
            %>
            <%
                List<Users> list = new ArrayList<>();
                list.add(me);
                list.add(she);
                request.setAttribute("list", list);
            %>
        
            <h3>在request域中,获取List中的值</h3>
            ${requestScope.list[0].name}<%=" "%>
            ${requestScope.list[0].password}<%=" "%>
            ${requestScope.list[1].name}<%=" "%>
            ${requestScope.list[1].password}
        
        </body>
        
      3. 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo04.jsp

        20200607102249
    3. 获取Map集合:${域名称.键名.key名称}${域名称.键名["key名称"]}

      1. 这里也是使用上面的Users对象

      2. ExpressionLanguageDemo05.jsp

        <body>
            <%
                Users me = new Users();
                me.setName("LeeHua");
                me.setPassword("love");
                me.setDate(new Date());
        
                Users she = new Users();
                she.setName("Rainbow");
                she.setPassword("1314");
                she.setDate(new Date());
            %>
            <%
                Map<String, Users> map = new HashMap<>();
                map.put("Hua", me);
                map.put("Cai", she);
                request.setAttribute("map", map);
            %>
        
            <h3>在request域中,获取Map中的值</h3>
            ${requestScope.map.Hua.name}<%=" "%>
            ${requestScope.map.Hua.password}<%=" "%>
            ${requestScope.map.Cai.name}<%=" "%>
            ${requestScope.map.Cai.password}
        
            <h3>在request域中,获取Map中的值</h3>
            ${requestScope.map["Hua"].name}<%=" "%>
            ${requestScope.map["Hua"].password}<%=" "%>
            ${requestScope.map["Cai"].name}<%=" "%>
            ${requestScope.map["Cai"].password}
        </body>
        
      3. 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo05.jsp

        20200607105416

    empty 运算符

    1. 空运算符 empty ,用于判断字符串、集合、数组对象是否为null或者长度为0

    2. 格式:

      • 判断字符串、集合、数组对象是否为null或者长度为0

        ${empty XXX}
        
      • 判断字符串、集合、数组对象是否不为null或者长度不为0

        ${not empty XXX}
        
    3. 举例:

      1. ExpressionLanguageDemo06.jsp

        <body>
            <%
                String me = "LeeHua";
                String she = "Rainbow";
                List<String> list = new ArrayList<>();
                list.add("love");
                list.add("1314");
                request.setAttribute("name1", me);
                request.setAttribute("name2", she);
                request.setAttribute("list", list);
            %>
        
            <h3>为空判断!!!</h3>
            ${empty name1}<br/>
            ${not empty name2}<br/>
            ${empty list}<br/>
            ${not empty list}
        </body>
        
      2. 浏览器中访问:http://localhost:8080/JspStudy_war_exploded/ExpressionLanguageDemo06.jsp

        20200607114554

    隐式对象

    参考:隐含对象

    pageContext对象

    pageContext对象是JSP中pageContext对象的引用。通过pageContext对象,您可以访问request对象。比如,访问request对象传入的查询字符串,就像这样:

    ${pageContext.request.queryString}
    
    • 动态获取虚拟目录

      <body>
          <h3>动态获取虚拟目录:</h3>
          ${pageContext.request.contextPath}
      </body>
      

    Scope对象

    • pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。
    • 举例来说,如果您需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。

    param和paramValues对象

    • param和paramValues对象用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

    • 举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}

    • 接下来的例子表明了如何访问request中的username参数:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <%
              String title = "Accessing Request Param";
              request.setAttribute("title", title);
          %>
          <title><% out.print(title); %></title>
      </head>
      <body>
          <center><h1><% out.print(title); %></h1></center>
          <div align="center">
              <p>${param["username"]}</p>
              <p>${paramValues}</p>
          </div>
      </body>
      </html>
      
    • param返回一个参数,paramValues返回一个Map<String, String> 集合。

    header和headerValues对象

    • header和headerValues对象用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。

    • 举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent},或者${header["user-agent"]}

    • 接下来的例子表明了如何访问user-agent信息头:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <% String title = "User Agent Example"; %>
          <title><% out.print(title); %></title>
      </head>
      <body>
          <center><h1></h1></center>
          <div align="center">
              <p>${header["user-agant"]}</p>
              <p>${headerValues}</p>
          </div>
      </body>
      </html>
      
    • header对象返回单一值,而headerValues则返回一个字符串数组。


    参考文献

    1. JSP 表达式语言| 菜鸟教程
    Good Good Write Bug, Day Day Up
  • 相关阅读:
    pip常用命令
    Conda环境管理
    关于自动化去掉验证码(收录)
    下载安装Eclipse---来自廖雪峰老师
    linux之top命令
    python——os模块
    Crypto
    Java_局部内部类
    Java_内部类
    Java_权限修饰符
  • 原文地址:https://www.cnblogs.com/liyihua/p/14477401.html
Copyright © 2020-2023  润新知