1、EL 表达式
1.1 什么是EL表达式,EL表达式的作用?
EL表达式的全称是Expression Language。它就是表达式语言。
EL表达式可以很好的替代表达式脚本在jsp页面上进行输出。
EL表达式的格式是:${ key }
EL表达式在输出null值的时候。输出的是空串
<body>
<%
request.setAttribute("abc", "value");
%>
表达式脚本:<%=request.getAttribute("abc") == null ? "" : request.getAttribute("abc") %><br/>
EL表达式:${ abc }<br/>
</body>
1.2 EL 表达式搜索域数据的顺序
EL表达式主要是输出域对象中的数据
当四个域中都相同的数据的时候。使用EL表达式输出数据。EL表达式会从四个域中分别搜索。
搜索的顺序是 从小到大。
也就是 pageContext ----->>>> request ----->>>> session ----->>>> application
<body>
<%
// request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
// pageContext.setAttribute("key02-", "pageContext");
%>
${ key }<br/>
</body>
1.3 EL 表达式 输出Bean的普通属性,数组属性
a.)需求——输出Person类中普通属性,数组属性。list集合属性和map集合属性。
public class Person {
private int age;
private String[] phones;
private List<String> list;
private Map<String, Object> map;
public String getAbc() {
return "abc";
}
}
jsp中的代码:
<body>
<%
//创建一个Person对象。并且把它保存到域对象中
Person person = new Person();
person.setAge(18);
person.setPhones(new String[]{"18610548888","18666668888","18699998888"});
List<String> list = new ArrayList<String>();
list.add("list1");
list.add("list2");
list.add("list3");
person.setList(list);
Map<String,Object> map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
person.setMap(map);
request.setAttribute("p", person);
%>
person的对象输出 ==>> ${ p }<br/>
person的age属性 ==>> ${ p.age }<br/>
person的phones属性 ==>> ${ p.phones[2] }<br/>
person的list属性 ==>> ${ p.list[2] }<br/>
person的map属性 ==>> ${ p.map.key3 }<br/>
person的abc属性 ==>> ${ p.abc }
</body>
注:${ p.age } p 表示一个Person对象.那么p.age 中的age表示找person对象的getAge方法(也就是读方法)
去掉Eclipse自动的一些较验。
1.4 EL 表达式 — — 运算
语法:${ 运算表达式 } , EL 表达式支持如下运算符:
(1)关系运算
(2)逻辑运算
(3)算数运算
(4)empty运算
empty运算可以判断el有达式中的数据值是否为空。如果为空,就返回true。非空就是false。
空的情况以下几种:
- 值为null的时候。
- 如果是Object数组,并且长度为零。
- 如果是空的字符串。
- 如果是List集合的时候。并且元素个数为零
- 如果是Map集合的时候。并且元素个数为零
<body>
<%
// 1、值为null的时候。
request.setAttribute("emptyValue", null);
// 2、如果是Object数组,并且长度为零。
request.setAttribute("emptyArr", new Object[]{});
// 3、如果是空的字符串。
request.setAttribute("emptyStr", "");
// 4、如果是List集合的时候。并且元素个数为零
List<String> list = new ArrayList<String>();
// list.add("123");
request.setAttribute("emptyList", list);
// 5、如果是Map集合的时候。并且元素个数为零
Map<String,Object> map = new HashMap<String,Object>();
// map.put("erea", "asdf");
request.setAttribute("emptyMap", map);
%>
${ empty emptyValue }<br/>
${ empty emptyArr }<br/>
${ empty emptyStr }<br/>
${ empty emptyList }<br/>
${ empty emptyMap }<br/>
</body>
(5)元运算
表达式1 ? 表达式2 : 表达式3
如果表达式1的值为true.就返回表达式2的值,如果表达式1的值为false,就返回表达式3的值。
示例代码: ${ 12 == 12 ? "12等于12":"12不等于12" }
(6)“.”点运算 和 [] 中括号运算符
“.” 点运算 可以取个一个JavaBean对象的某个属性的值。或取得一个Map对象中某个指定key的值
[] 中括号运算 可以取得一个有序集合中指定下标的元素值。中括号运算,还可以取得Map集合中key里含有特殊字符的key的值。
<body>
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
request.setAttribute("map", map);
%>
${ map['a.a.a'] }<br/>
${ map["b+b+b"] }<br/>
</body>
1.5 EL 表达式的11 个隐含对象
对象名 对象的类型 对象的作用
pageContext PageContextImpl 获取jsp的九大内置对象
pageScope Map<String,Object> 可以获取pageContext域中的数据
requestScope Map<String,Object> 可以获取到request域中的数据
sessionScope Map<String,Object> 可以获取到Session域中的数据
applicationScope Map<String,Object> 可以获取到ServletContext域中的数据
param Map<String,String> 可以获取到请求的参数值
paramValues Map<String,String[]> 可以获取到请求的参数值(多个值
header Map<String,String> 可以获取到请求头的值
headerValues Map<String,String[]> 可以获取到请求头的值(多个值
initParam Map<String,String> 可以获取context-param上下文参数的值
cookie Map<String,Cookie> 可以获取到Cookie的信息
1.6 EL 获取四个特定域中的属性
pageScope <======> pageContext 域
requestScope <======> request 域
sessionScope <======> Session域
applicationScope <======> ServletContext 域
你可以通过指定一个特定的域的EL隐含对象。输出指定域的数据。
1.7 pageContext对象的使用
<body>
<%
pageContext.setAttribute("req", request);
%>
<!-- getScheme方法获取请求的协议 -->
<!-- getServerName方法获取服务器的IP -->
<!-- getServerPort方法获取服务器的端口号 -->
<!-- getContextPath方法获取工程路径 -->
<!-- getRemoteHost方法获取客户端的IP -->
<!-- getSession方法获取当前会话对象 -->
<!-- getSession().getId()方法获取当前会话的id -->
<%=request.getSession().getId() %><br/>
1.协议: ${ req.scheme }<br/>
2.服务器ip: ${ pageContext.request.serverName }<br/>
3.服务器端口: ${ pageContext.request.serverPort }<br/>
4.获取工程路径: ${ pageContext.request.contextPath }<br/>
5.获取请求方法: ${ pageContext.request.method }<br/>
6.获取客户端ip地址: ${ pageContext.request.remoteHost }<br/>
7.获取会话的id编号: ${ pageContext.request.session.id }<br/>
</body>
1.8 EL表达式其他隐含对象的使用
param和paramValues 获取请求参数值
获取请求参数username的值:${ param.username }<br/>
获取请求参数password的值:${ param.password }<br/>
<hr/>
${ param.hobby }<br/>
${ paramValues.hobby[0] }--${ paramValues.hobby[1] }
header和headerValues 获取请求头信息
${ header['User-Agent'] }<br/>
${ headerValues['User-Agent'][0] }<br/>
initParam
代码:${ initParam.username }
cookie 的演示 ${ cookie.JSESSIONID.value }
2、JSTL 标签库
略过…… 后补
来源:CSDN
作者:鮀城小帅
链接:https://blog.csdn.net/weixin_42405670/article/details/103931413