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 多得(或扫描京东二维码)查看详情吧!