• JSP中EL表达式的应用


    1.EL表达式的概念

    EL全称Expression Language,用来简化JSP页面的数据访问操作,代替<%%>、<%=%>,提供一个更清晰简洁的视图层。

    通常与JSTL标签一起使用。

    2.EL表达式语法

    ${expression},expression为有效表达式,如常量,变量,操作符和函数调用。

    3..与 [ ] 运算符

    EL 提供 . 和 [ ] 两种运算符来存取数据。

    ${user.name}等价于${user["name"]}或${user['name']}

    . 和 [ ] 也可以同时混合使用

    ${requestScope.userlist[0].name},回传结果为用户数据列表中第一个用户的名字。

    不过,以下两种情况,两者会有差异(转自:https://blog.csdn.net/JavaNotes/article/details/80722153):

    (1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],

    例如:${user.My-Name }

    上述是不正确的方式,应当改为:${user["My-Name"] }

    (2) 我们来考虑下列情况:

    ${sessionScope.user[data]}

    此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

    假若data 的值为"name"时,它就等于${sessionScope.user.name}。

    因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。

    4.EL表达式的简单应用

    <%@page import="java.util.Map"%>
    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@page import="entity.User"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>EL表达式用法</title>
    </head>
    <body>
    
    <!--1.获取JSP的隐式对象,并使用其中的方法-->
    <br>获取JSP的隐式对象,并使用其中的方法
    <%
    out.println("获取项目根路径:"+request.getContextPath()+"<br>");
    out.println("获取response对象的字符集:"+response.getCharacterEncoding());
    %>
    <br>使用EL表达式获取项目根路径:${pageContext.request.contextPath} 
    <br>使用EL表达式获取response对象的字符集:${pageContext.response.characterEncoding} 
    <hr>
    
    <!--2.获取四个域对象中的值-->
    
    <%
    //设置域对象的值
    pageContext.setAttribute("username", "pageContext张三");
    pageContext.setAttribute("password", "pageContext123456");
    request.setAttribute("username", "request张三");
    request.setAttribute("password", "request123456");
    session.setAttribute("username", "session张三");
    session.setAttribute("password", "session123456");
    application.setAttribute("username", "application张三");
    application.setAttribute("password", "application123456");
    %>
    
    
    <%
    out.println("Java程序片中获取request域对象的值");
    %>
    <br>用户名:<%=request.getAttribute("username") %>
    <br>密码:<%=request.getAttribute("password") %>
    <br>EL从域中取出数据(EL最重要的作用)获取的顺序:依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找
    <br>用户名:${username} 
    <br>密码:${password} 
    <hr>
    
    <!--3.EL本身也有和JSP中一样的隐含对象-->
    <br>EL表达式中的隐式对象
    <br>${sessionScope.username}${sessionScope.username}
    <br>${requestScope.username}${requestScope.username}
    <br>${username}${username}
    <br>${applicationScope.username}${applicationScope.username}
    <hr>
    
    
    <!--4.EL借助四个域对象来读取javabean的属性值-->
    <br>EL借助四个域对象来读取javabean的属性值
    <%
    User u = new User();
    u.setName("张三");
    out.println(u.getName());
    request.setAttribute("user", u);
    %>
    <br>EL读取javaBean属性:${u.name},无法读取
    <br>EL读取javaBean属性:${user.name}${user.name}
    
    <hr>
    <!--5.EL算术运算、关系运算-->
    <br>EL算术运算、关系运算
    <br>${1+2}=${1+2}
    <br>${1-2}=${1-2}
    <br>${1*2}=${1*2}
    <br>${1/2}=${1/2}
    <br>${1 div 2}=${1 div 2}
    <br>${1%2}=${1%2}
    <br>${1 mod  2}=${1 mod  2}
    <br>${1<2?true:false}=${1<2?true:false}
    <br>关系运算中,gt表示大于,ge表示大于等于,lt表示小于,le表示小于等于,eq表示等于,ne表示不等于
    <br>${100>200}=${100>200}
    <br>${100 ge 200}=${100 ge 200}
    <hr>
    <!--6.EL读取collection-->
    <%
    List<User> users = new ArrayList<User>();
    users.add(u);
    users.add(new User("李四","123456"));
    request.setAttribute("userlist", users);
    %>
    <br>${userlist}${userlist}
    <br>${userlist[0].name}${userlist[0].name}
    <br>${userlist[1].name}${userlist[1].name}
    <hr>
    <!--7.EL读取Map对象-->
    <%
    Map map1 = new HashMap();
    map1.put("username", "york");
    map1.put("user", u);
    request.setAttribute("userlist2", map1);
    %>
    <br>${userlist2.username}${userlist2.username}
    <br>${userlist2.user.name}${userlist2.user.name}
    </body>
    </html>

    运行结果:

    EL表达式读取JavaBean,Map对象,Collection集合都是要先放到四个域对象中才能访问,本质还是读取域对象中存放的数据。

    参考文章:

    https://blog.csdn.net/JavaNotes/article/details/80722153

    https://www.cnblogs.com/xdp-gacl/p/3938361.html

    转载文章链接已标明,如有侵权请告知。文章仅作为知识记忆所用,如有错误,敬请指正。
  • 相关阅读:
    Block代码块中使用局部变量注意点
    This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
    iOS实现渐变颜色
    linker command failed with exit code 1 (use -v to see invocation)
    关于SVN的405错误Server sent unexpected return value (405 Method Not Allowed)的解决办法
    提交SVN Working copy locked解决
    FSCalendar使用和注意事项
    c/c++左值和右值
    mysql使用笔记(一)
    解决 ssh 登录到ubuntu server 慢的问题
  • 原文地址:https://www.cnblogs.com/YorkZhangYang/p/12817916.html
Copyright © 2020-2023  润新知