• JSP中的EL 表达式


    JSP中的EL 表达式

    什么是 EL 表达式,EL 表达式的作用?

    EL 表达式的全称是:Expression Language。是表达式语言。
    EL 表达式的什么作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
    因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

    
        <%
            request.setAttribute("key","值");
        %>
        表达式脚本输出 key 的值是:
        <%=request.getAttribute("key")==null?"":request.getAttribute("key")%>
    EL 表达式输出 key 的值是:${key}

    EL 表达式的格式是:${表达式}
    EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。

    EL 表达式搜索域数据的顺序

    EL 表达式主要是在 jsp 页面中输出数据。
    主要是输出域对象中的数据。
    当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

    
        <%
            // 往四个域中都保存了相同的 key 的数据。
            request.setAttribute("key", "request");
            session.setAttribute("key", "session");
            application.setAttribute("key", "application");
            pageContext.setAttribute("key", "pageContext");
        %>
        ${ key }
    
    

    注释掉pageContext:

    四个域的大小:pageContext

    按照从小到大的顺序进行搜索然后输出。

    EL 表达式输出 Bean 的普通属性,数组属性,List 集合属性,map 集合属性

    例:输出 Person 类中普通属性,数组属性。list 集合属性和 map 集合属性。

    Person 类:

    public class Person {
        // Person 类中普通属性,数组属性。 list 集合属性和 map 集合属性。
        private String name;
        private String[] phones;
        private List cities;
        private Map map;
    
        public Person() {
    
        }
    
        public int getAge() {
            return 21;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPhones(String[] phones) {
            this.phones = phones;
        }
    
        public void setCities(List cities) {
            this.cities = cities;
        }
    
        public String getName() {
            return name;
        }
    
        public String[] getPhones() {
            return phones;
        }
    
        public List getCities() {
            return cities;
        }
    
        public Map getMap() {
            return map;
        }
    
        public void setMap(Map map) {
            this.map = map;
        }
    
        public Person(String name, String[] phones, List cities, Map map) {
            this.name = name;
            this.phones = phones;
            this.cities = cities;
            this.map = map;
        }
    }
    

    jsp输出代码:

        <%
            Person person = new Person();
            person.setName("愷龍");
            person.setPhones(new String[]{"18755556666","18688886666","18699998888"});
            List cities = new ArrayList();
            cities.add(" 大连");
            cities.add(" 沈阳");
            cities.add(" 北京");
            person.setCities(cities);
            Map map = new HashMap<>();
            map.put("key1","value1");
            map.put("key2","value2");
            map.put("key3","value3");
            person.setMap(map);
            pageContext.setAttribute("p", person);
        %>
        输出 Person:${ p }
    输出 Person 的 name 属性:${p.name}
    输出 Person 的 phones 数组属性值:${p.phones[2]}
    输出 Person 的 cities 集合中的元素值:${p.cities}
    输出 Person 的 List 集合中个别元素值:${p.cities[2]}
    输出 Person 的 Map 集合: ${p.map}
    输出 Person 的 Map 集合中某个 key 的值: ${p.map.key3}
    输出 Person 的 age 属性:${p.age}

    结果:

    EL 表达式 --运算

    语法:${ 运算表达式 } , EL 表达式支持如下运算符:

    关系运算

    关系运算符 说明 范 例 结果
    == 或 eq 等于 ${ 5 == 5 } 或 ${ 5 eq 5 } true
    != 或 ne 不等于 ${ 5 !=5 } 或 ${ 5 ne 5 } false
    < 或 lt 小于 ${ 3 < 5 } 或 ${ 3 lt 5 } true
    > 或 gt 大于 ${ 2 > 10 } 或 ${ 2 gt 10 } false
    <= 或 le 小于等于 ${ 5 <= 12 } 或 ${ 5 le 12 } true
    >= 或 ge 大于等于 ${ 3 >= 5 } 或 ${ 3 ge 5 } false

    逻辑运算

    逻辑运算符 说 明 范 例 结果
    && 或 and 与运算 ${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 } false
    || 或or 或运算 ${12 == 12 || 12<11} 或 ${12==12or12<11} true
    !或not 取反运算 ${ !true } 或 ${not true } false

    算术运算

    算术运算符 说明 范例 结果
    + 加法 ${ 12 + 18 } 30
    - 减法 ${ 18 - 8 } 10
    * 乘法 ${ 12 * 12 } 144
    /或div 除法 ${ 144 / 12 } 或 ${ 144 div 12 } 12
    %或mod 取模 ${ 144 % 10 } 或 ${ 144 mod 10 } 4

    empty 运算

    empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。
    以下几种情况为空:
    1、值为 null 值的时候,为空
    2、值为空串的时候,为空
    3、值是 Object 类型数组,长度为零的时候
    4、list 集合,元素个数为零
    5、map 集合,元素个数为零

    
    <%
        // 1 、值为 null 值的时候,为空
        request.setAttribute("emptyNull", null);
        // 2 、值为空串的时候,为空
        request.setAttribute("emptyStr", "");
        // 3 、值是 Object 类型数组,长度为零的时候
        request.setAttribute("emptyArr", new Object[]{});
        // 4 、 list 集合,元素个数为零
        List list = new ArrayList<>();
        request.setAttribute("emptyList", list);
        //list 集合,元素个数为零
        List list1 = new ArrayList<>();
        list1.add("abc");
        request.setAttribute("emptyList1",list1);
        // 5 、 map 集合,元素个数为零
        Map map = new HashMap();
        request.setAttribute("emptyMap", map);
         map 集合,元素个数为1
        Map map1 = new HashMap();
        map1.put("key1", "value1");
        request.setAttribute("emptyMap1", map1);
    %>
    ${ empty emptyNull } 
    ${ empty emptyStr }
    ${ empty emptyArr }
    ${ empty emptyList }
    ${ empty emptyList1 }
    ${ empty emptyMap }
    ${ empty emptyMap1 }

    结果:

    三元运算

    表达式 1?表达式 2:表达式 3
    如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。

    示例:
    ${ 12 != 12 ? "表达式为真":" 表达式为假" }

    “ . ”点运算 和 [] 中括号运算符

    .点运算,可以输出 Bean 对象中某个属性的值。
    []中括号运算,可以输出有序集合中某个元素的值。
    并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

    
        <%
            Map map = new HashMap();
            map.put("a.a.a", "aaaValue");
            map.put("b+b+b", "bbbValue");
            map.put("c-c-c", "cccValue");
            map.put("d", "dValue");
            map.put("e", "eValue");
            map.put("f", "fValue");
            request.setAttribute("map", map);
        %>
        ${ map['a.a.a'] } 
    ${ map["b+b+b"] }
    ${ map['c-c-c'] }
    ${ map.d }
    ${ map.e}
    ${ map.f}

    结果:

    EL 表达式的 11 个隐含对象

    EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。

    变量 类型 作用
    pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象
    pageScope Map 它可以获取 pageContext 域中的数据
    requestScope Map 它可以获取 Request 域中的数据
    sessionScope Map 它可以获取 Session 域中的数据
    applicationScope Map 它可以获取 ServletContext 域中的数据
    param Map 它可以获取请求参数的值
    paramValues Map 它也可以获取请求参数的值,获取多个值的时候使用。
    header Map 它可以获取请求头的信息
    headerValues Map 它可以获取请求头的信息,它可以获取多个值的情况
    cookie Map 它可以获取当前请求的 Cookie 信息
    initParam Map 它可以获取在 web.xml 中配置的上下文参数

    例子:

    
        <%
            request.setAttribute("aaa","aaaValue");
            session.setAttribute("bbb","bbbValue");
        %>
        ${requestScope["aaa"] }
    ${sessionScope["bbb"]}

    结果:

    EL 获取四个特定域中的属性、

    pageScope --->pageContext 域
    requestScope ---> Request 域
    sessionScope ---> Session 域
    applicationScope --->ServletContext 域

    
        <%
            pageContext.setAttribute("key1", "pageContext1");
            pageContext.setAttribute("key2", "pageContext2");
            request.setAttribute("key2", "request");
            session.setAttribute("key2", "session");
            application.setAttribute("key2", "application");
        %>
        ${ applicationScope.key2 }
        ${ sessionScope.key2 }
        ${ requestScope.key2 }
    
    

    结果:

    pageContext 对象的使用

    1. 协议:
    2. 服务器 ip:
    3. 服务器端口:
    4. 获取工程路径:
    5. 获取请求方法:
    6. 获取客户端 ip 地址:
    7. 获取会话的 id 编号:
    
        <%--
        request.getScheme() 它可以获取请求的协议
        request.getServerName() 获取请求的服务器 ip 或域名
        request.getServerPort() 获取请求的服务器端口号
        getContextPath() 获取当前工程路径
        request.getMethod() 获取请求的方式( GET 或 POST )
        request.getRemoteHost() 获取客户端的 ip 地址
        session.getId() 获取会话的唯一标识
        --%>
        <%
            pageContext.setAttribute("req", request);
        %>
        <%=request.getScheme() %> 
    1.协议: ${ req.scheme }
    2.服务器 ip:${ pageContext.request.serverName }
    3.服务器端口:${ pageContext.request.serverPort }
    4.获取工程路径:${ pageContext.request.contextPath }
    5.获取请求方法:${ pageContext.request.method }
    6.获取客户端 ip 地址:${ pageContext.request.remoteHost }
    7.获取会话的 id 编号:${ pageContext.session.id }

    结果:

    EL 表达式其他隐含对象的使用

    变量 类型 作用
    param Map 它可以获取请求参数的值
    paramValues Map 它也可以获取请求参数的值,获取多个值的时候使用

    假设浏览器中请求地址为:

    http://localhost:8080/JSPDemo/PersonOutput.jsp?username=愷龍&password=123456&teacher=耿祥义&teacher=柳淑琴

    
    输出请求参数 username 的值:${ param.username } 
    输出请求参数 password 的值:${ param.password }
    输出请求参数 username 的值:${ paramValues.username[0] }
    输出请求参数 teacher 的值:${ paramValues.teacher[0] }
    输出请求参数 teacher 的值:${ paramValues.teacher[1] }

    结果:

    变量 类型 作用
    header Map 它可以获取请求头的信息
    headerValues Map 它可以获取请求头的信息,它可以获取多个值的情况
    
        输出请求头【User-Agent】的值:${ header['User-Agent'] } 
    输出请求头【Connection】的值:${ header.Connection }
    输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] }

    变量 类型 作用
    cookie Map 它可以获取当前请求的 Cookie 信息
    
        获取 Cookie 的名称:${ cookie.JSESSIONID.name } 
    获取 Cookie 的值:${ cookie.JSESSIONID.value }

    变量 类型 作用
    initParam Map 它可以获取在 web.xml 中配置的上下文参数

    web.xml 中的配置:

    <context-param>
            <param-name>usernameparam-name>
            <param-value>愷龍param-value>
        context-param>
        <context-param>
            <param-name>ageparam-name>
            <param-value>21param-value>
        context-param>
    

    jsp代码:

    
        输出<Context-param>username 的值:${ initParam.username } 
    输出<Context-param>age 的值:${ initParam.age }

    欢迎关注公众号:愚生浅末

    如图片失效等情况请参阅头条文章:https://www.toutiao.com/article/7137103777814807053/


    __EOF__

  • 本文作者: 愷龍
  • 本文链接: https://www.cnblogs.com/kohler21/p/16632827.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    【机器学习】有监督学习算法之:逻辑回归
    51单片机学习:步进电机实验
    javascript实现动态分页
    gitlab各组件功能list
    渣画质视频秒变清晰,“达芬奇”工具集帮你自动搞定
    C++多态
    linux 邮箱配置
    Android插件化学习之启动插件Activity
    J9数字论:什么是Web3.0概念?
    虚假姓名生成器
  • 原文地址:https://www.cnblogs.com/kohler21/p/16632827.html