1、什么是EL:
EL是JSP表达式语言,全称是ExpressionLanguage,使用EL的目的是简化在JSP中访问变量的方式,简单静态HTML与Java代码的耦合。用来替代jsp中的输出<%=..%>
2. EL的作用:
- 1.获取域中数据 ★
- 2.执行运算 ★
- 3.获取常见的web对象
- 4.调用java的方法
格式: ${el表达式}
2.1.获取域中的数据
获取简单数据
${pageScope|requestScope|sessionScope|applicationScope.属性名}快捷获取:${skey}
${属性名}:依次从pageContext,request,session,application查找指定属性,若查找到返回值,结束该次查找
若查找不到,返回""
演示:
//JSP页面中省略上半段
<body>
<%
request.setAttribute("rkey", "rvalue");
session.setAttribute("skey", "svalue");
session.setAttribute("rkey", "svalue");
application.setAttribute("akey", "avalue");
%>
获取request中的数据:<br>
老方式:<%=request.getAttribute("rkey") %><br/>
el方式:${requestScope.rkey }<br/>
<hr>
<hr>
获取失败老方式:<%=application.getAttribute("aakey") %><br/> 返回NULl
获取失败el方式:${applicationScope.aakey } 空字符
<hr>
便捷获取:
${skey },${rkey },${aakey },${akey }
<hr>
${rkey } 先获取大的rkey就是request的
<hr>
</body>
获取复杂的数据
获取数组中的数据
${域中的名称[index]} ${arr[1] }
获取list中的数据
${域中的名称[index]} ${list[1]
获取map中的数据
${域中的名称.键名} ${map.age }在JSP页面中,这里省略上半部分
<% //往request域中放入数组 request.setAttribute("arr", new String[]{"aa","bb","cc"}); //往request域中放入list List list=new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list", list); //往request域中放入map Map m=new HashMap(); m.put("username","tom"); m.put("age",18); request.setAttribute("map", m); //往域中放入一个简单数据 request.setAttribute("arr.age","18"); %> 获取域中的数组:<br> 老方式:<%=((String[])request.getAttribute("arr"))[1] %><br> el方式:${arr[1] }<br> <hr> //注意这里request.getAttribute完后是Object,需要强转才可以转成数组 获取域中的list:<br> 老方式:<%=((List)request.getAttribute("list")).get(1) %><br> el方式:${list[1] }<br> list的长度:${list.size() } <hr> 获取域中的map:<br> 老方式:<%=((Map)request.getAttribute("map")).get("age") %><br> el方式:${map.age }<br> <hr> 获取特殊名字的数据<br> ${requestScope["arr.age"] }
注意:★
若属性名中出现了"."|"+"|"-"等特殊符号,需要使用scope获取
例如:
${requestScope["arr.age"] }
.JavaBean导航
- javabean:
java语言编写的一个可重用的组件,
狭义上来说就是我们编写的一个普通的java类 例如:User Person
- javabean规范:
1.必须是一个公共的具体的类 public class
2.提供私有的字段 private String id;//id称之为字段
3.提供公共访问字段的方法 get|set|is方法
public String getId(){..}
一旦有公共的方法之后,get|set|is之后的内容,将首字母小写,将这个东西称之为bean属性
id就是一个bean属性
4.提供一个无参的构造器
5.一般实现序列化接口 serializable
演示:
第一步:先编写一个javabean
把getusername改为getname
这里面username bean属性已经消失变成name了,在get之后的东西称为一个bean。
username这时称为字段。
import java.io.Serializable;
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return username;
}
public void setName(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第二步:在JSP页面中,这里省略上半部分
<%
User u=new User();
u.setId("001");
u.setName("tom");
u.setPassword("123");
//将u放入域中
request.setAttribute("user", u);
%>
获取域中javabean的id值:<br>
老方式:<%=((User)request.getAttribute("user")).getId() %><br/>
el方式:${user.id }<!-- 相当于调用 getXxx() --><hr>
2.2执行运算:
1.可以执行 四则运算 关系(+ - * /) 以及逻辑运算(&& ||)
2. 注意:
1.+:只能进行加法运算,字符串形式数字可以进行加法运算.
2.empty:判断一个容器的长度是否为0(array set list map),还可以判断一个对象是否为空
三元运算符
eg:${3>4?"yes":"no"}
输出为no
JSP页面中省略上半部分
<body> <% request.setAttribute("i", 3); request.setAttribute("j", 4); request.setAttribute("q", "12"); request.setAttribute("k", "k"); List l=null; request.setAttribute("list", l); List ll=new ArrayList(); ll.add("22"); request.setAttribute("list_", ll); User user=null; request.setAttribute("bean", user); User user_=new User(); request.setAttribute("bean_", user_); %> ${i+j }<br/> ${i+q }<br/> ${q+q }<br/> <%-- ${i+k }<br/> --%> <hr> 域中list的长度是否为0:${empty list}<br/> 域中list_的长度是否为0:${empty list_ }<br/> <hr> 域中的bean是否为空:${empty bean }<br/> 域中的bean_是否为空:${empty bean_ }<br/> <hr> ${ 3>4?"yes":"no" }<br/> ${i==3 } </body>
3.el的内置对象(了解)可以直接使用
11个
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
haederValues
initParam
cookie★
pageContext★
注意:
除了pagecontext其余对象获取的全是map集合key value的形式
1. 了解:和参数相关的el内置对象
param
paramValues
index.jsp中 <a href="/day12/el/demo5.jsp?username=tom&password=123&hobby=drink&hobby=sleep">和参数相关的内置对象(了解) </a><br>
在JSP页面中就可以 ${param.username }<hr>来获取
2.了解:和请求头相关的el内置对象
header
haederValues
<body> ${header }<hr> ${headerValues } <hr> <hr> referer:${header.referer }<br> user-agent:${headerValues["user-agent"][0] } </body>
3.了解:和全局初始化参数相关的el内置对象
initParam
4.cookie内置对象:
${cookie} 获取map{key=Cookie}
例如:创建cookie
Cookie c=new Cookie("username","tom");
通过${cookie}获取相当于
{username=new Cookie("username","tom")}
相当于map的key是cookie的键
map的value是当前cookie
若项获取名称username的cookie的value值(获取tom)
${cookie.username.value}--javabean导航
注意:
java中Cookie的api
getName():获取cookie的名称
getValue():获取cookie的value值
我们称name和value是cookie的bean属性
使用cookie内置对象:
${cookie.给cookie起名字.value}
例如:
获取jsession的值
${cookie.JSESSIONID.value}
5.pageContext:获取不是map集合,相当于jsp的pageContext内置对象
在jsp页面中动态的获取项目名