• EL 表达式


    1. EL 表达式简介

    • EL 是 JSP 内置的表达式语言!!!表达式末尾没有";", 语句末尾需要";"
    • jsp 2.0 开始, 不让再使用 java 脚本,而是使用 EL 表达式和动态标签来替代 java 脚本;
    • EL 表达式只能做输出, 替代的是 <%=....%>

    2. EL 表达式来读取四大域

    • ${xxx} 表示全域查找名为 xxx 的属性, 如果不存在, 输出空字符串,而不是 null;
    • 获取指定域的属性: ${pageScope.xxx}, ${requestScope.xxx}
      ${sessionScope.xxx} ${applicationScope.xxx}

    3. JavaBean 导航

    // it.cast.domain 包下
        public class Employee{
            private String name;
            private double salary;
            private Address address;
    
            public String getName(){
                return name;
            }
            public void setName(String name){
                this.name = name;
            }
    
            public double getSalary(){
                return salary;
            }
            public void setSalary(double salary){
                this.salary = salary;
            }
    
            public Address getAddress(){
                return address;
            }
            public void setAddress(Address address){
                this.address=address;
            }
    
            public String toString(){
                return "Employee [name="+name+",salary="+salary+", address="+address+"]";
            }
        }
    
        // Address 类
        public class Address{
            private String city;
            private String street;
    
            public String getCity(){
                return city;
            }
            public void setCity(String city){
                this.city = city;
            }
    
            public String getStreet(){
                return street;
            }
            public void setStreet(String street){
                this.street = street;
            }
    
            public String toString(){
                return "Address [city="+city+",street="+street+"]";
            }
        }
    
    
    // 在 a.jsp 中获取地址中的 street
        // 导包
    
        <%@page import="cn.itcast.domain.*" %>
        <body>
            <%
                Address addr = new Address();
                addr.setCity("北京");
                addr.setStreet("西三旗");
    
                Employee emp = new Employee();
                emp.setName("张三");
                emp.setSalary(1234);
                emp.setAddress(addr);
    
                request.setAttribute("emp",emp);
            %>
    
            // 使用 el 表达式获取 street
            // 相当于: <% ((Employee)request.getAttribute("emp")).getAddress().getStreet()  %>
            ${requestScope.emp.address.street}
        </body>
    

    4. EL 表达式的11个内置对象

    1. 无需创建即可使用, 这 11 个内置对象中有 10 个是 Map 类型的;
    2. pageContext 不是 Map 类型, 而是 pageContext 类型;
    3. 11 个内置对象
      • pageScope
      • requestScope
      • sessionScope
      • applicationScope
      • param : 获取请求参数, 它是一个 Map, 其中 key 是参数名, value 是参数值, 适用于单值的参数;
      • paramValues: 适用于多值的参数; value 对应的是数组;
      • header: 获取请求头, 适用于单值请求头; ${header.Host}
      • headerValues: 适用于多值请求头; ${header['User-Agent']}
      • initParam: 获取 web.xml 中的<context-param> 内的参数;
      • cookie: Map<String, Cookie> 类型, 其中 key是cookie 的name, value 是 cookie 对象;
        例如: 获取 JSESSIONID 的值: ${cookie.JSESSIONID.value}
      • pageContext: 它是 PageContext 类型, 可以使用 pageContext 对象调用 getXXX() 方法.
        例如, 获取项目名: ${pageContext.request.contextPath}
        其实就是: pageContext.getRequest.getContextPath()

    5. EL 函数库 (由 JSTL 提供)

    1. EL 函数库概述

    1. EL 函数库是由第三方对 EL 的扩展.
    2. EL 函数库就是定义一些有返回值的静态方法.
    3. EL 函数库中包含了很多对字符串的操作方法, 以及对集合对象的操作.
      例如, ${fn:length("abc")}, 表示字符串的长度

    2. 导入函数库

    • 需要导入标签库: jstl-1.2.jar
    • 格式: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

    3. EL 函数库介绍

    • String toUpperCase(String input);
    • String toLowerCase(String input);
    • boolean contains(String input, String substring);
    • String escapeXml(String input); 把 input 中的 "<", ">", "&"等符合进行转义.
      例如: ${fn:escapeXml("<html></html>")} 输出结果:

    4. 自定义函数库

    1. 步骤:
      • 写一个 java 类, 类中可以定义 0~N 个方法, 但必须是 Static, 而且有返回值;
      • 在 WEB-INF 目录下创建一个 tld 文件;
      • 在 jsp 页面导入标签库: <%@ taglib prefix="it" uri="/WEB-INF/tlds/myfn.tld" %>
      • 在 jsp 页面中使用自定义的函数 ${it:test()}
    // java 类
        public class MyFunction{
            // 静态方法
            public static String test(){
                return "这是自定义方法";
            }
        }
    
    // WEB-INF 目录下创建 myfn.tld 文件
        <?xml version="1.0" encoding="UTF-8" ?>
    
        <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
            version="2.0">
    
        <tlib-version>1.0</tlib-version>
        <short-name>myfn</short-name>
        <uri>http://www.cnbologs.com/link-world/jsp/functions</uri>
    
        <function>
            <name>test</name>
            <function-class>cn.itcast.fn.MyFunction</function-class>
            <function-signature>java.lang.String test()</function-signature>
        </function>
        </taglib>
    

    参考资料:

  • 相关阅读:
    【leetcode】Pascal's Triangle
    [bxd学习java基本点]10.set元素不重复,取元素顺序会变的。TreeSet取值时,是安顺序来的。
    cocos2dx 学习点滴(4) cocos2dx 架构和引擎目录
    VC 2008编译libxml22.7.6
    程序猿的九重天
    使用批处理文件设置环境变量
    删除指定目录下除开指定文件外所有文件的批处理命令
    关于永动机的思考
    程序员的九阳真经
    上帝的归上帝,程序的归程序 (卓有成效的程序员)
  • 原文地址:https://www.cnblogs.com/linkworld/p/7597885.html
Copyright © 2020-2023  润新知