EL表达式
EL(Expression Language表达式语言)
作用:替换和简化jsp页面中java代码的编写
语法:
1
${表达式}
注意:
jsp默认支持el表达式,如果要忽略EL表达式
设置JSP中page指令中isELIgnored=”true”忽略当前JSP页面中所有的EL表达式
${表达式} 忽略当前这个EL表达式
使用:
运算
运算符
算术运算符:+ - * / %
比较运算符:< > <= >= == !=
逻辑运算符: && || !
空运算符 empty
功能:用于判断字符串,集合,数组对象是否为null并且长度是否为0
${empty list}
${not empty str}:表示判断字符串,集合,数组对象是否不为null或者长度>0
获取值
运算符
算术:1
2
3
4
5${3+4}</body><br>
${3/4}<br> <%--${3 div 4}--%>
${3%4}<br> <%--${3 mod 4}--%>
比较:(逻辑类似不演示了)1
${3<4}<br>
返回true
empty运算符
1 | empty运算符 |
可以判断是否为null或长度是否为零
如果要取反操作,那就是not empty
获取值
EL表达式只能从域对象中获取值
语法:
${域名称.键名}:从指定域中获取指定键的值
域名称:
pageScope —> pageContext
requestScope —> request
sessionScope —> session
applicationScope —> application(ServletContext)
举例:在request域中存储了name-张三
获取:${requestScope.name}
${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
1 | <% |
如果没有找到对应的值,则会返回空字符串而不是null,这样就不会打乱布局
获取对象值
- 对象:${域名称.键名.属性名}
- 本质上调用对象的getter方法
User类:1
2
3private String name;
private int age;
private Date birthday;
代码太多,就正常的生成getter和setter就行,这里只列成员变量了
User对象:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<%
User user=new User();
user.setName("张三");
user.setAge(23);
user.setBirthday(new Date());
request.setAttribute("u",user);
%>
el获取对象中的值
${requestScope.u}<br>
<%--
通过的是对象的属性来获取
setter或getter方法,去掉set或get,在将剩余部分,首字母变小写。
setName --> Name --> name
--%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
运行结果
保证键名称不相同,可以省略掉requestScope
如果想要只输出日期中的年或者月之类的,直接birthday.year1
${u.birthday.year}<br>
这样就会输出年份了,经典套娃
如果想要中文格式的,只需要在类中声明一个方法,格式化对象类,再调用就OK了1
2
3
4
5
6
7
8
9
10
11public String getBitStr(){
if(birthday!=null){
//1.格式化日期对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//2.返回字符串
return sdf.format(birthday);
}else{
return " ";
}
}
调用:1
${u.bitStr}<br>
运行结果
获取List值
- List集合:${域名称.键名[索引]}
设置List:
1 | List list=new ArrayList<>(); |
获取List:
1 | el获取List值 |
这就是获取List的值,很简单,当下标越界时并不会报错或者输出null,而是输出空字符串,同样这样的优化不会打乱布局
如果添加的是对象1
2
3
4List list=new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add(user);
获取也很简单1
2
3
4
5
6el获取List值
${list}<br>
${list[0]}<br>
${list[1]}<br>
${list[5]}<br>
${list[2].name}<br>
获取List值
Map集合:
${域名称.键名.key名称}
${域名称.键名[“key名称”]}
设置Map:1
2
3
4Map map=new HashMap();
map.put("sname","李四");
map.put("gender","男");
request.setAttribute("map",map);
获取Map:1
2
3
4<h3>el获取Map值</h3>
${map}<br>
${map.sname}<br>
${map["gender"]}<br>
很简单
添加对象方法也一样,套娃就完了
隐式对象
隐式对象有11个,但是现在只需要掌握pageContext
pageContext:
- 获取JSP其他八个内置对象
- ${pageContext.request.contextPath}:动态获取虚拟目录
- 获取JSP其他八个内置对象
1 | ${pageContext.request}<br> |
这个的用途就是在表单action中,把虚拟目录变为动态改变的,而不是写死的静态的