EL的介绍:
EL全称 Express Language 表达式语言,重要功能是获取jsp页面的数据
因为原生的jsp 获取数据 操作繁琐,于是有了 EL表达式,EL表达式与JSTL标签库配合,就能打造出一个不错的完整web项目。
EL的基本使用
EL的使用:
- 从四大域中获取数据
- 从指定域中获取数据
- 从请求参数中获取数据
从四大域中获取数据:
可以看到我们在pageContext中存入了name=pageContext的信息,如果我们通过java代码读取,那将会比较繁琐,例如代码中的pageContext.getAttribute();有了EL表达式我们就能通过${}的方式去访问我们想访问的数据。
${name}表示获取name属性值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>1.获取四大域中的数据</title>
</head>
<body>
<%--优先级依次是pageContext,request,session,application--%>
<%
pageContext.setAttribute("name","pageContext");
request.setAttribute("name","request");
session.setAttribute("name","session");
application.setAttribute("name","application");
String str= pageContext.getAttribute("name").toString();
System.out.println(str);
%>
name=${name}
</body>
</html>
执行结果:
从指定域中获取数据:
我们还可以通过指定域,来获取信息。
pageScope代表当前jsp页面范围;requestScore表示 request请求范围(用户提交请求结束后,request生命周期结束);sessionScore表示session 会话范围(服务器关闭或session延时时间到,session生命周期结束);application表示用户共享信息范围
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>2.从指定域中获取数据</title>
</head>
<body>
<%--XXXScope.name代表获取XXX信息域中name的属性值--%>
<%
pageContext.setAttribute("name","pageContext");
request.setAttribute("name","request");
session.setAttribute("name","session");
application.setAttribute("name","application");
%>
pageContext的name=${pageScope.name}</br>
request的name=${requestScope.name}</br>
session的name=${sessionScope.name}</br>
application的name=${applicationScope.name}</br>
</body>
</html>
执行结果:
从请求参数中获取数据:
${param.name}
需要时刻牢记,param获取前端页面传递进来的参数值
requestScope获取 服务器自己设置的requese参数值
${param.name} 等价于 request.getParamter(“name”),这两种方法一般用于服务器从页面或者客户端获取的内容,这些内容都是String的。
${requestScope.name} 等价于request.getAttribute(“name”),一般是从服务器传递结果到页面,在页面中取出服务器端保存的值!
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>4.获取请求中的指定参数</title>
</head>
<body>
<form action=${pageContext.request.contextPath}/show1.jsp method="post">
username<input type="text" name="username">
password<input type="text" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show1.jsp</title>
</head>
<body>
<%--获取请求中的指定参数 param.属性名--%>
request的username的参数值是:${param.username}</br>
request的password的参数值是:${param.password}
</body>
</html>
执行结果:
EL的进阶使用
- 获取JavaBean(实体类)获取数据
- 从数组中获取数据
- 从集合中获取数据
- 从Map中获取数据
获取JavaBean数据:
从我们自己设置的request内容中访问数据,所以用requestScope
${user.password}表示获取requestScope的user属性值的password的值
<%@ page contentType="text/html;charset=UTF-8" language="java" import="entity.User" %>
<html>
<head>
<title>7.访问实体类JavaBean的属性</title>
</head>
<body>
<%--访问实体类的属性${Key.属性} 没有访问到会显示空字符串,不会报异常--%>
<%
User user=new User("mulan","123456");
request.setAttribute("user",user);
%>
mulan用户的密码是${requestScope.user.password}
</body>
</html>
执行结果:
2.从数组中获取数据:
和java后端读取数组元素一样 属性名[index]
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>8.访问数组中的数据</title>
</head>
<body>
<%
String names[]={"mulan","lily","mike"};
pageContext.setAttribute("name",names);
%>
<%--当数组下标越界不显示异常,只是不显示--%>
name[0]=${name[0]}<br>
name[1]=${name[1]}<br>
name[4]=${name[4]}
</body>
</html>
执行结果:
从集合中获取数据:
集合的底层是数组,所以我们可以像访问数组一样访问
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>9.访问类的ArrayList集合</title>
</head>
<body>
<%
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
pageContext.setAttribute("key",list);
%>
list[0]=${key[0]}<br>
list[1]=${key[1]}<br>
list[2]=${key[2]}<br>
</body>
</html>
执行结果:
4.访问Map的数据元素
${Key.get(key)}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>10.访问类的Map键值对</title>
</head>
<body>
<%
Map<String,Object> map=new HashMap<String,Object>();
map.put("1","first");
map.put("2","second");
map.put("3","third");
pageContext.setAttribute("key",map);
%>
one=${key.get("1")}<br>
two=${key.get("2")}<br>
three=${key.get("3")}
</body>
</html>
执行结果