深入浅出剖析EL表达式和JSTL

简介: 深入浅出剖析EL表达式和JSTL

el表达式

产生背景

  • 从JSP2.0开始,就不推荐使用java脚本,而是使用el表达式或者动态标签代替 java脚本; 页面标签;

概念和原理

  • 概念:Expression Language :jsp内置的一种表达式语言;
  • 原理:el表达式的出现目的是替换jsp中的java的脚本中的<%=%>
  • 并且内部进行了null值判断,如果为null则不会输出 ,不为null输出对应数据

写法规范

1)点操作符

EL表达式通常有两部分组成:对象和属性。就像Java代码中一样,在EL表达式中也可以用点操作符" . "来访问对象。例如,通过${Dog.name}可以访问Dog对象中的name属性(直接 .name就可以,不用setter或者getter啥的)。而且可以一直往后去 . 有多少点多少。

2) [ ] 操作符

与点操作符类似,“[ ]“操作符也可以访问对象的某个属性,如${Dog[“name”]}可以直接访问狗的名字属性。但是,除此之外,”[ ]” 操作符还提供更加强大的功能。

>当属性名中如果包含了特殊字符如" . “或” -“等的情况下,就不能使用点操作符来访问,这时只能使用”[ ]"操作符。

>访问数组,如果有一个对象名为array的数组,那么可以根据索引值来访问其中的元素,如a r r a y [ 0 ] 、 {array[0]}、array[0]{array[1]}等。

>"[ ]"操作符中可以使用变量实现动态访问,如${Dog[dogname]},dogname是另一个变量,改变其值可以动态访问Dog的不同属性(有点像多态)

创建Servlet,做数据提交

@WebServlet("/el")
public class ELServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //0.使用el表达式存放单独的值;
        req.getSession().setAttribute("str","单独的变量");
        //1.使用el表达式存放对象;
        //创建一个session对象,用来设置值,作用域整个 会话期间。
        HttpSession session = req.getSession();
        //设置值;参数1:字符串;参数2:object类型值;
        TUser user=new TUser(1,"admin","123456",22);
        //user存到变量:user里面;
        session.setAttribute("user",user);
        //转发一下到el.jsp页面;
        //2.list集合;项目中list多,比set多;      cate:类别;
        //String[]arr={"","","",""} ,再设置值,一会儿练习,自己写;
        List<String> cateList=new ArrayList<>();
        cateList.add("家电");
        cateList.add("鞋子");
        cateList.add("服装");
        cateList.add("食品");
        //设置到session里面;
        session.setAttribute("cateList",cateList);
        //3.HashMap<Key,value>:键值对集合; 商品键值对
        HashMap<String,String>map=new HashMap<>();
        map.put("pname","英伟达AI显卡88990");
        map.put("price","889900");
        map.put("pnum","8");
        //设置到session里面;
        session.setAttribute("map",map);
        //转发;
        //4.对象,list;二者结合起来;
        //list里面存放对象;
        TUser user1=new TUser(2,"tom","666",66);
        TUser user2=new TUser(3,"jack.ma","mayun",22);
        TUser user3=new TUser(4,"pony.ma","ama",18);
        TUser user4=new TUser(6,"yanhong.li","666",45);
        TUser user5=new TUser(8,"sougou.zhang","666",100);
        ArrayList<TUser>userList=new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        userList.add(user5);
        //设置session,存放泛型集合数据 ;
        session.setAttribute("userList",userList);
        req.getRequestDispatcher("el.jsp").forward(req,resp);
    }
}

el.jsp页面测试之

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el表达式测试</title>
</head>
<body>
    <%-- 1.使用el读取类的对象;
             将user对象做为了一个整体,输出到页面;
             1.0 之前是单独值的方式,${单独的变量}可以获取单独的变量对应的值;
             1.1 读取对象的值:${对象.属性名}
             1.2 集合/数组: 集合名/数组名[下标]可以访问集合的元素           数组 [家电, 鞋子, 服装, 食品]
             1.3  双列集合(HashMap)             {pnum=8, pname=英伟达AI显卡88990, price=889900}
                    集合名.key
             1.4 泛型集合数据;
                    userList[下标]:获取的泛型集合里面的每个对象;
                    userList[下标].属性名
        --%>
    ${str}
    <hr>读取对象;
    ${user.id}/${user.username}/${user.password}/${user.age} <br>
    ${user[id]}/${user[username]}/${user[password]}/${user[age]}
    <hr>
    ${cateList[0]}/${cateList[1]}/${cateList[2]}/${cateList[3]}
    <hr>
    ${map}<br>
    ${map.pname}/${map.price}/${map.pnum}<br>
    <hr>
    ${userList[0]} <br>
    ${userList[1]}<br>
    ${userList[2]}<br>
    ${userList[3]}<br>
    ${userList[4]} <br>
    <hr>
    <br>
    读取每个对象里面的数据值;
    ${userList[0].id} /${userList[0].username}/${userList[0].password}/${userList[0].age}<br>
    ${userList[1].id}/${userList[1].username}//${userList[1].password}//${userList[1].age}<br>
    ${userList[2]}<br>
    ${userList[3]}<br>
    ${userList[4]} <br>
</body>
</html>

具体效果

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华 社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!


目录
相关文章
|
7月前
EL表达式和Jstl常见的用法
EL表达式和Jstl常见的用法
|
XML SQL Java
EL表达式和JSTL
EL表达式和JSTL
110 0
|
7月前
|
Java 数据库
el表达式与jstl的用法
el表达式与jstl的用法
|
7月前
|
XML 前端开发 Java
掌握Spring EL表达式的基础知识
掌握Spring EL表达式的基础知识
187 1
jstl编程案例一
jstl编程案例一
52 0
|
Java Apache
jstl概念以及基本使用
jstl概念以及基本使用
77 0
|
XML SQL Java
JavaWeb--EL表达式&JSTL 标签库
JavaWeb--EL表达式&JSTL 标签库
73 0
QGS
|
存储 SQL XML
浅谈EL表达式和JSTL常用标签
EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
QGS
99 0
|
前端开发 Java
JSP简介&&EL表达式&& JSTL
JSP简介&&EL表达式&& JSTL
JSP简介&&EL表达式&& JSTL
|
存储 Java
【JavaWeb】之JSTL & EL表达式(下)
【JavaWeb】之JSTL & EL表达式(下)
110 0
【JavaWeb】之JSTL & EL表达式(下)