EL表达式
语法格式
在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值
EL表达式的作用:
EL如何取数据
EL只能拿取四大域中的数据,因此你必须把数据放在四大域中,域对象.setAttribute(KEY,VLAUE),EL表达式,才能拿得到。
第二个EL的语法${}大括号里面不要加引号,加引号的话它就等于把这个字符串输出了。
-
如果获取对象的属性,没有对应的get方法直接报错,报500错误!
-
如果四大域,存的key都一样,当我们取得时候,优先级是page>request>session>application,优先从小得范围内开始取。
-
EL提供了4个隐式的范围对象,分别是 pagascope,requestscope,sessionscope,applicationscope,我们可以在访问的key前面加其中的对象,就能获取到指定域的对象了。
-
如果你取的时候名字写错了,那么EL表达式输出的值将啥也不显示,是一个空白。
-
另外一种取数据的语法:${xxx[“xxxxxxx”]},中括号当中需要添加双引号,多用于名字中带有点的,你用普通的调它调不出来
-
怎么从map和数组中取数据
<%@ page import="com.sj.www.User" %>
<%@ page import="java.util.*" %><%--
Created by IntelliJ IDEA.
User: TMJIE5200
Date: 2022/3/25
Time: 18:59
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--从四大域中取数据--%>
<%
request.setAttribute("username","张三");
pageContext.setAttribute("name","李四");
session.setAttribute("name","王五");
application.setAttribute("name","赵六");
%>
${username}<br>
${pageScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}<br>
<%
/*从对象中取*/
User user = new User();
user.setName("张伟");
user.setAge(22);
user.setSex("男");
request.setAttribute("objuser",user);
%>
<%--以前取request.getpatinte("objuser")才能拿到值--%>
${requestScope.objuser.toString()}<br>
${requestScope.objuser.name}<br>
${requestScope.objuser.sex}<br>
${requestScope.objuser.age}<br>
<%
/*从map集合中取*/
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put("name","丽萨");
hashMap.put("age","22");
hashMap.put("sex","女");
pageContext.setAttribute("person",hashMap);
%>
<%--取出哈希map--%>
${pageScope.person}<br>
${pageScope.person.name}<br>
${pageScope.person.sex}<br>
${pageScope.person.age}<br>
<%
/*从一个list集合中取*/
User zhangsan = new User();
zhangsan.setSex("男");
zhangsan.setName("王明");
zhangsan.setAge(33);
List<User> list=new ArrayList<>();
list.add(user);/*把张伟放进去*/
list.add(zhangsan);/*把张伟放进去*/
session.setAttribute("张伟",list);
%>
<%--list依旧是使用下标--%>
${sessionScope.张伟[0].name}<br>
${sessionScope.张伟[0].sex}<br>
${sessionScope.张伟[0].age}<br>
${sessionScope.person1[1].name}<br>
<%
Map<String,String> map=new TreeMap<>();
map.put("type","水果");
session.setAttribute("type1",map);
%>
<%--map一律使用的是名字获取--%>
${sessionScope.type1.type}<br>
<%
int[] arr={1,2,3,4,5,6,7,8};
session.setAttribute("arr",arr);
%>
<%--数组是采用下标--%>
${arr[0]}<br>
${arr[2]}<br>
${arr[3]}<br>
${arr[4]}<br>
<%--具体使用什么,可以参考,原本获取它的数据是怎么获取的,是根据get方法还是下标,并且首字母要变小写,要符合驼峰命名法--%>
如果你想在jsp忽略某一个EL表达式,你可以在表达式前面加一个斜杠
以下所有对比的效果是一样的
用户名:<%=request.getParameter("username")%><br>
用户名:${param.username}<br>
param只能拿数组或者map集合中的第一个元素
paramValues可以拿任意位置的元素
爱好:${param.aihao}<br>
爱好:${paramValues.aihao[0]}、${paramValues.aihao[1]}、${paramValues.aihao[2]}<br>
application 对应的是 servletContext
获取XML里面的initparam
END