一、EL表达式作用:
- 可以代替JSP中的Java代码,让JSP文件中的代码看起来整洁易读。
二、步骤:
(1)从某个域中取数据,取之前必须要保证数据已经存进域里
四大域:(pageContext仅jsp能使用,request,session,application)
(2)将取出的数据转换成字符串(不是字符串调用toString转成字符串)
(3)将字符串输出到浏览器
三、取数据顺序:
如果四个域中有同名数据,那默认从顺序:(从小到大)
pageContext(仅jsp能使用)
request
session
application
四、语法:
${key}
key后可跟.可跟[ ],一般跟. ,只有当key对象的属性名是abc.efg这种的,得用[ ](属性名abc.efg纯纯自找麻烦)
- 取域中的数据:
<%=request.getAttribute("username") %>
等价于:
${username}
- 取域中对象的属性值:
假设有java代码:
//创建对象
User user1 = new User();
user.setName("zhangsan");
user.setId("001");
//对象存到域中
request.setAttribute("u1",user1);
则:
<%=u1.getName()%>
等价于:
${u1.name}使用这个语法的前提是User类中有getName()方法。
等价于:
${u1["name"]}中括号要加双引号
- 取域中对象的属性值,属性是个对象:
<%=u1.getObject().getName()%>
等价于:
${u1.object.name}使用这个语法的前提是User类中有getObject()方法,Object类中有getName()方法。
- 获取Map集合中的数据:
假设有java代码:
Map<String,String> map = new Map();
Map.put("username","zhangsan");
Map.put("password","123");
request.serAttribute("a",map);
则:
${a.username}//zhangsan
${a.password}//123
- 获取数组、list集合中的数据:
假设有java代码:
String[] s = {"abc","def"};
request.setAttribute("a",s);
则:
${a[0]}//abc
$(a[1])//def
- 从指定域中取数据:
若四个域中有同名数据,默认从小到大取,但又想取指定域的数据,可以用scope对象
${pageScope.data}
${requestScope.data}
${sessionScope.data}
${applicationScope.data}
- 获取JSP九大内置对象:
因为EL表达式中只有pageContext对象,其余八大对象没有,所以在EL中其他八大对象可用pageContext的八个get方法获取
<%= request.getContextPath()%>
等同于:
${pagecontext.request.contextPath}
- 隐含对象param获取用户提交的参数:
浏览器URL:http://localhost:8080/xmm/index.jsp?username=lisi
<%=request.getParameter("username")%>//lisi
等同于:
${param.username}
- 隐含对象paramValues获取用户提交的参数:
浏览器URL:http://localhost:8080/xmm/index.jsp?aihao=chouyan&aihao=hejiu
<%=request.getParameterValues("爱好")%>//得到一个数组
等同于:
${paramValues.aihao}
获取数组中元素:
${paramValues.aihao[0]}
${paramValues.aihao[1]}
- 隐含对象initParam获取xml文件应用域中存储的数据:
<%=application.getInitParameter("pagesize")%>
等同于:
${initParam.pagesize}
- 运算符:
${10+"20"}//30,EL中不会进行字符串拼接,加号两边不是数字转数字,转不了报NumberFormatException错误。