el表达式
el表达式是什么?
sun制订的一种用于计算的一种规则,早期只能用于给标签的属性赋值,现在也可以直接输出。
el表达式的基本语法
${el表达式}
1) 第一种: 访问bean的属性
a. ${user.name}:
jsp引擎会依次从pageContext、request、session、application查找绑订名为"user" 的对 象,如果找到了,就丌再向下查找,否则,继续向下查找。 找到后,调用该对象的getName(),并输出其值;找丌到,则输出""(空)。
b. 或者也可以使用${user["name"]},效果相同
"name" 表示字符串
c. 或者是${user[propname]},注意propname没有引号,表示变量
d. 此外,[ ]里面还可以是0,1..这样的下标,作用是输出数组里的元素值。
e. 可以使用pageScope,requestScope,sessionScope,applicationScope四个关键字指定查找的范围。
f. ${requestScope.user.name}只到request中去找,丌再依次到4个范围查找了
2) 第二种: 获得请求参数值
a. ${param.username}
等价于 request.getParameter("username");
b. ${paramValues.interest}
等价于request.getParameterValues("interest");
3) 第三种: 计算一个表达式,将结果作为标签的属性值或者直接输出
a. 算术运算
"+" , "-" , "*" , "/" , "%" , 但是要注意,"+"号丌能连接字符串。
b. 关系运算
"==" , "!=" , ">" , "<" ,">=" , "<=" 可以使用对应的"eq","nq","lt","gt","le","ge"代替。
c. 逻辑运算
"&&","||","!",可以使用"and","or","not"代替。
d. empty运算
判断一个字符串是否为空,集合内容是否为空,以及绑订的对象是否存在。
第一种: 访问bean的属性
1) User.java
package bean; public class User { private String name; private int age; private IdCard card; private String[] interest; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public IdCard getCard() { return card; } public void setCard(IdCard card) { this.card = card; } public String[] getInterest() { return interest; } public void setInterest(String[] interest) { this.interest = interest; } }
2) IdCard.java
package bean; public class IdCard { private String cardNo; public String getCardNo() { return cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; } }
3)el.jsp
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@page import="bean.*"%> <html> <!-- 访问bean的属性 --> <head> <title>Insert title here</title> </head> <body style="font-size: 30px;"> <% User user = new User(); user.setName("abc"); user.setAge(22); IdCard card = new IdCard(); card.setCardNo("100"); user.setCard(card); user.setInterest(new String[] { "fishing", "sleep" }); request.setAttribute("user1", user); %> <!-- 1. Java代码 --> <% //User user1 = // (User)request.getAttribute("user1"); //out.println(user1.getName()); //out.println(user1.getAge()); %> <!-- 2. EL表达式1 --> <!-- 2.1 基本类型 --> ${user1.name} <br /> ${user1.age} <br /> <!-- 2.2 引用类型 --> ${user1.card.cardNo} <br /> <!-- 3. EL表达式2 --> <hr /> <br /> ${user1["name"]} <br /> <!-- 4. EL表达式3 --> <% request.setAttribute("propname", "name"); %> ${user1[propname]}; <br /> ${user1.interest[1]} <br /> <!-- 5. 访问范围 --> <hr /> <br /> user's name:${requestScope.user1.name} </body> </html>
第二种: 获得请求参数值
el02.jsp
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <!-- 获得请求参数 --> <head> <title>Insert title here</title> </head> <body style="font-size: 30px;"> username:${param.username} <br /> interest:${paramValues.interest[1]} interest:${paramValues.interest[0]} </body> </html>
第三种: 计算一个表达式,将结果作为标签的属性值或者直接输出
el03.jsp
<%@ page import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <!-- 计算 --> <head> <title>Insert title here</title> </head> <body style="font-size: 30px;"> <!--1. 算术运算 --> ${1+2} <br /> ${"123" + "567" } <br /> <!-- ${"abc" + "123" } 会出异常--> <hr /> <br /> <!--2. 关系运算 --> ${"abc" == "abc"} <br /> ${"abc" eq "abc"} <br /> <hr /> <br /> <% pageContext.setAttribute("str", "abc"); %> ${"abc" eq str } <br /> <!--3. empty运算 --> <hr /> <br /> <% request.setAttribute("str1", ""); List list = new ArrayList(); request.setAttribute("list1", list); request.setAttribute("obj1", null); %> 空字符结果为true: <br /> ${empty str1} <br /> 找丌到绑订名对应的对象,结果是true: <br /> ${empty obj} <br /> 集合内容为空,结果为true: <br /> ${empty list1} <br /> null,结果为true: <br /> ${empty obj1} </body> </html>