从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器。这就是EL表达式的功效。
第一功效:从某个域中取数据。
四个域:
第二功效:将取出的数据转成字符串。
如果是一个java对象,也会自动调用java对象的toString方法将其转换成字符串。
第三功效:将字符串输出到浏览器。
和这个一样:<%= %>,将其输出到浏览器。
语法格式:${表达式}
将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。数据是必须存储到四大范围之一的。
<%
// 创建User对象
User user = new User();
user.setUsername("jackson");
user.setPassword("1234");
user.setAge(50);
request.setAttribute("userObj", user)
%>
使用EL表达式取
${这个位置写什么????这里写的一定是存储到域对象当中时的name}
要这样写:${userObj}
等同于java代码:<%=request.getAttribute("userObj")%>
你不要这样写:${"userObj"}
${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute(“abc”, 对象);
${“abc”} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。
从域中取数据,取出user对象,然后调用user对象的toString方法,(没有get方法无法拿到,可以不使用驼峰原则)转换成字符串,输出到浏览器。
${userObj.username} 使用这个语法的前提是:User对象有getUsername()方法。
${userObj.password} 使用这个语法的前提是:User对象有getPassword()方法。
${userObj.age} 使用这个语法的前提是:User对象有getAge()方法。
${userObj.email} 使用这个语法的前提是:User对象有getEmail()方法。
EL表达式中的. 这个语法,实际上调用了底层的getXxx()方法。
注意:如果没有对应的get方法,则出现异常。报500错误。
${userObj.addr222.zipcode}
以上EL表达式对应的java代码:user.getAddr222().getZipcode()
pageContext < request < session < application
EL表达式对null进行了预处理。如果是null,则向浏览器输出一个空字符串。
从Map集合中取数据:${map.key}
从数组和List集合中取数据:
<%@page contentType="text/html;charset=UTF-8" isELIgnored="true" %>
isELIgnored="true" 表示忽略EL表达式
isELIgnored="false" 表示不忽略EL表达式。(这是默认值)
isELIgnored=“true” 这个是全局的控制忽略EL表达式。
${username} 使用反斜杠进行局部控制忽略EL表达式。
由于EL中没有内含request对象,所以通过pageContext.request获取
pageContext
<%=request.contextPath()%>
${pageContext.request.contextPath}
//获取应用的根
param
<%=request.getParameter("xxx")%>
${param.xxx}
paramValues
<%=request.getParameters("xxx")%>
${paramValues.xxx[0]}
${paramValues.xxx[1]}
initParam
<%=application.getInitParameter("xxx")%>
//application是jsp的九大内置对象,对应ServiceContext
${initParam.xxx}
算术运算符 +、-、*、/、%
+号不会做字符串拼接,永远做的是加法运算,${10+“20”}=30("20"转换成数字20)
${10+“abc”}(转不成数字报500错误)
关系运算符 == eq != > >= < <=
==、eq、!= 都会调用equals方法,字符串比较与字符串常量池无关,只是重写了equals方法
" a b c " = = " a b c " , 不 能 写 成 {"abc"=="abc"},不能写成 "abc"=="abc",不能写成{“abc”}=${“abc”}
逻辑运算符 ! && || not and or
有运算级,!记得加括号
条件运算符 ? :
取值运算符 [ ] 和 .
empty运算符