本章目标:
理解并使用EL的表达式
理解并使用常用的JSTL标签
为什么要使用EL?
* 在jsp中,使用java脚本的局限
* 在jsp页面中嵌入啦大量的Java代码
* 访问结构比较复杂的数据时代代码繁琐,且经常需要强制类型转换
<%
Employee employee = (Employee)request.getAttribut("employee");
Computer comp = employee.getComputer();
String manufacturer = comp.gerManufacture();
%>
EL表达式使用JSP的开发变得更加简单
格式:${requestScope.employee.computer.manufacturer}
EL表达式的简介:
* EL全称式(Expression Language)表达是语言,用于简化JSP页面内的Java代码
* EL表达式的主要作用是获取数据,其实就是从域对象中获取数据,然后,将数据展示在页面上,而表达式的语法也比较简单,${expression},例如:${brands}就是获取域中存储的key为brands的值。
EL表达式语法:
${EL expression}
1、通过变量名获取
2、获取对象的属性值
4、获取集合元素
5、执行表达式
EL表达式的快速入门
1、创建一个web项目
2、在web项目下以后缀名为jsp的文件(elDemo.jsp)
3、在文件中向域对象添加数据
4、使用三种方式获取域对象中的数据(Java代码块,jdp表达式、el表达式)
5、部署并启动项目
7、通过浏览器测试
<body>
<%--使用Java代码请求域存入一个名为message的数据--%>
<% request.setAttribute("message","Expression Language"); %>
Java代码块获取:<% out.println(request.getAttribute("message")); %>
</br>
JSP表达式:<%=request.Attribute("message")%>
</br>
EL表达式:${message}
</br>
${3>4}
</body>
算数运算符:
+ | 加 | ${5+5} |
- | 减 | ${5-4} |
* | 乘法 | ${5*3} |
/或div | 取商 | ${23/10} |
%或者mod | 取余 | ${7%2} |
<body>
<h1>算数运算</h1>
${4+2}</br>
${2-1}</br>
${30/10}</br>
$<30%2></br>
${43div3}</br> <!--除-->
${78mod10}</br> <!--取余-->
</body>
关系运算符:
运算符 | 作用 | 示例 | 结果 |
!=或ne | 不等于 | ${4!=2}或${5 ne 2} | false |
<或lt | 小于 | ${4<3}或${4 gt 3} | false |
>或gt | 大于 | ${3>2}或${3 gt 2} | true |
<=或le | 小于等于 | ${4<=3}或${4 le 3} | false |
>=或ge | 大于等于 | ${4>=3}或${4 ge 3} | ture |
==或eq | 等于 | ${5==5}或${5 eq 5} | true |
<body>
<h1>关系运算符</h1>
${3 == 4} </br>
${4 != 3} </br>
${3 > 2} </br>
${3 < 1} </br>
${3 >= 2} </br>
</body>
运算符 | 作用 | 示例 | 结果 |
&& 或 and | 或者 | ${a && b}或${a and b} | true/false |
|| 或 or | 或 | ${a || b}或${a or b} | true\false |
!或not | 取反 | ${!a} 或${not a} | true\false |
<body>
<h1>逻辑运算符</h1>
${3>2 && 4 >= 4}
${3>2 || 3 != null}
${!(3>2)}
</body>
其他运算符:
运算符 | 作用 |
empty | 1、判断对象是否为null |
条件?表达式1:表达式2 | 三元运算符 |
<body>
<h2>empty运算符</h2>
<%
String str = "";
// String str = "";
String str1 = null;
request.serAttribute("str",str);
%>
${empty str}</br>
<%--取反-->
${not empty str}</br>
============================================
<h1>三元运算符</h1>
<%
String str = "abc";
request.setAttribute("str",str);
%>
${str==null?0:str}
</body>
EL表达式获取数据
1、EL表达式只能从域对象中获取数据
2、语法:
${域名称,键名}---->从指定域中获取指定键的值
指定作用域
属性范围 | EL中的名称 |
page | pageScope,例如${pageScope,username} page的作用域是查找变量username,找不到返回null |
request | requestScope |
session | sessionScope |
application | applicationScope |
<html>
<head></head>
<body>
<%
// 向域中存储数据
request.setAttribute("naem","张芷");
request.setAttribute("age","23");
%>
<h1>EL获取值</h1>
${requestScope.name}
${requestScope.age}
<%--在没有这个值之前 返回一个空的字符串--%>
${requestScope.getnder}
</body>
</html>
顺序查找:
按照:page--->request--->session--->application的作用域依次查找,找到即返回,最终找不到返回null
域对象
JavaWeb中有四大域对象,分别是
- page:当前页面有效
- request:当前请求有效
- session:当前会话有效
- application:当前应用有效
EL表达式获取数据,会依次从上面四个寻找,直到找到为止。
例如:${message},EL表达式获取数据,会从page域对象中获取,如果还没有再到reques域对象中获取数据,如果没有再到session域对象中获取,如果还没有才回到application中获取数据。
获取对象,List集合 Map集合的值
对象:${与名称点属性名}
<body>
<%
User user = new User();
user.setName("张芷");
user.Setage(28);
user.setBirthday(new Date());
request.setAttribiute("u",suer);
%>
通过的是对象的属性获取
Stter或getter方法,去掉set或get,会将剩余部分,首字母变成小写
setName--->Name---->name
<h3>EL获取对象中的值</h3>
${requestScope.u}</br>
${requestScope.u.name}</br>
${u.age}</br>
${u.birthday}</hr>
${u.birstr}
</body>
public class User{
public static void main(String[] args){
private String name;
private Integer age;
private Date birthday;
public String getBirStr(){
if(birthday !=null){
// 格式化日期对象
SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
// 返回字符串
return sdf.format(birthday);
}else{
return "";
}
}
public User(String name, Integer age, Date birthday) {
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String () {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
}
Manufacure:制造,生产,加工,工业品
Scope:处理,范围,眼界,见识
Session:会议,开庭,一段shsh