欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Javaweb之EL表达式

程序员文章站 2023-01-11 21:40:33
1.EL表达式简介 EL全名为Expression Language。EL的主要作用为: 获取数据:EL表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据。(某个web域中的对象,访问JavaBean的属性,访问list集合,访问map集合,访问数组) 执 ......

1.el表达式简介

el全名为expression language。el的主要作用为:

  • 获取数据:el表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据。(某个web域中的对象,访问javabean的属性,访问list集合,访问map集合,访问数组)
  • 执行运算:利用el表达式可以在jsp页面中执行一些基本的关系运算、逻辑运算和算术运算,以在jsp页面中完成一些简单的逻辑运算。${user==null}
  • 获取web开发常用对象:el 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
  • 调用java方法:el表达式允许用户开发自定义el函数,以在jsp页面中通过el表达式调用java类的方法。

1.1 获取数据

使用el表达式获取数据的语法:"${标识符}"

el表达式语句在执行时,会调用pagecontext.findattribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回""(空字符串)。若没有指定哪个属性范围,它的默认值会从page范围找,假如找不到,再依序到request,session,application范围找。假如全部的范围都找不到时,就返回null值了。如下:${ }中没有sessionscope属性范围,依旧可以读到存储的数据。

<body>
  <%
  customer customer=new customer();
  customer.setname("koala");
  customer.setage(12);
  session.setattribute("customer",customer);
   %>
   <br>
   name: ${customer.name}
   <br>
   age: ${customer.age}
</body>

el表达式可以很轻松获取javabean的属性,或获取数组、collection、map类型集合的数据。

获取request域中的对象:

<body>
    <% request.setattribute("name", "koala"); %>
    name: ${name}
</body>

 Javaweb之EL表达式

获取javabean的属性:

<body>
<%
  customer customer=new customer();
  customer.setage(21);
  request.setattribute("customer",customer);
 %>
 customer's age: ${customer.age}
</body>

Javaweb之EL表达式

获取list集合中指定位置的元素:

<body>
  <%
    customer customer1=new customer();
    customer1.setage(21);
    customer customer2=new customer();
    customer2.setage(23);
    list<customer> list=new arraylist<customer>();
    list.add(customer1);
    list.add(customer2);
    request.setattribute("list", list);
   %>
   customer2's age:${list[1].age}
 </body>

Javaweb之EL表达式

1.2 执行运算

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

1.2.1 关系运算符

Javaweb之EL表达式

1.2.2 逻辑运算符

Javaweb之EL表达式

1.2.3 empty运算符

检查对象是否为null(空)

1.2.4 二元表达式

${username==null?"":user.name}

1.2.5 []和.号运算符

el提供.和[]两种运算符来存取数据,两者所代表的意思是一样的。

如下,当域对象的属性名中有特殊字符“.”时使用[]会很方便:

<body>
  <%
  customer customer=new customer();
  customer.setname("koala");
  session.setattribute("com.d.dsa",customer);
   %>
   <br>
   name: ${sessionscope["com.d.dsa"].name}
</body>

2.el的隐含对象

el中一共有11个隐含对象,可以将它分成三类:

  • 与范围有关的隐含对象:pagescope, requestscope, sessionscope, applicationscope
  • 与输入有关的隐含对象,获取请求参数的:param(一个), paramvalues(一组)
  • 其它请求对象:cookie, header, headervalues, initparam, pagecontext

2.1 与范围有关的隐含对象

<body>
  time:${applicationscope.time}
  <!-- 相当于
  <%=application.getattribute("time") %>
  -->
  <%
  application.setattribute("time",new date());
   %>
</body>

2.2 与输入有关的隐含对象

el.jsp中:

 <body>
  <a href="http://localhost:8080/mywebproject/jsptest/el2.jsp?score=98&name=a&name=b">to el2 page</a>
 </body>

 el2.jsp中:

<body>
    score:${param.score}
<!--相当于:
    <%= request.getattribute("score")%>
      -->
    <br>
    names:${paramvalues.name[0]} and ${paramvalues.name[1]}
</body>

运行el.jsp:

Javaweb之EL表达式

点击超链接:

Javaweb之EL表达式

注:

names:${paramvalues.name[0].class.name} 

相当于

<%= request.getparametervalues("name")[0].getclass().getname()%>

也就是只要返回值有get...方法,就可以使用el方法调用。

2.3 其它请求对象

  • cookie:假如我们在cookie中设定一个名称为usercountry的值,那么可以使用${cookie.usercountry}来取得它。
  • header和headervalues:header存储用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如,用户浏览器的版本,用户计算机所设定的区域等其他相关数据。若同一标头名称拥有不同的值,改用headervalues。
  • initparam:获得当前web应用的初始化参数:在web.xml中进行配置,
<context-param>
    <param-name>initname</param-name>
    <param-value>koala</param-value>
</context-param>

在jsp文件中使用initparam:${initparam.initname}即可获得当前web应用的初始化参数koala。

  • pagecontext:pagecontext即为pagecontext类型,但只能读取属性。

contextpath:${pagecontext.request.contextpath}

sessionid:${pagecontext.session.id}

sessionattributenames:${pagecontext.session.attributenames}

3.el的关系运算符

比较重要的是三目运算符:${param.score > 60 ? "及格" : "不及格"}

4.empty运算符

empty可以作用于一个集合,若集合不存在或集合中没有元素,其结果都为true。

<body>
  <% 
  list<string> names=new arraylist<string>();
  names.add("abc");
  request.setattribute("names",names);
  %>
  names is empty:${empty requestscope.names}
</body>

运行jsp文件,

Javaweb之EL表达式

 

搜索微信公众号“程序员考拉”欢迎关注!