EL表达式概述
EL表达式是一种可以嵌套在jsp内部的一种表达式,它能代替jsp页面中输出脚本的编写,比<%= %>更为简单高效。
EL表达式的作用
- 从域对象中查找指定的数据。
- 内置对象使用
- 执行运算符
EL表达式的语法
${
EL表达式内容}
el表达式中使用.和[ ]进行数据导航。
.与[]效果差不多,但是如果存在特殊字符需要用[]获取,[]可以获取集合和数组中数据。
${ user.name} 和 ${user[“name”]} 一样
如果存在这样的na-me的属性需要使用[], ${user[“na-me”]}
EL表达式读取数据域中数据
四个数据域对象:
HttpServletContext application; 整个项目
HttpSession session; 一次会话
HttpServletRequest requst ; 一次请求
HttpPageContext pageContext; 当前页面
<%
application.setAttribute("name", "zhangsan");
session.setAttribute("age", "21");
request.setAttribute("sex", "男");
pageContext.setAttribute("class", "java01");
pageContext.setAttribute("name", "lisi");
%>
//第一种获取方式,指定从哪个域对象中取
${
applicationScope.name}
${
sessionScope.age}
${
requestScope.sex}
${
pageScope.class}
${
pageScope.name}
//不指定域对象,它会从小到大的域对象中取寻找键,找到了就返回,如果找不到对应的键,返回空串-
${
name} lisi
${
name} “”
//会返回pageContext中数据:lisi
EL表达式读取对象
el表达式读取对象,对象的属性必须要有get方法才能读取,它是将get字符串后面的字符串当作可获取的键,get字符串后第一个首字母需大写。
如你有一个学生类,学生类中有一个name属性。
public class Student{
private String name;
//1.没有get,无法${student.name}获取
public String name(){
return name;
}
//2.有get,后面不是Name,后一个字母必须大写,无法${student.name}获取
public String getname(){
return name;
}
//可以${student.name}获取
public String getName(){
return name;
}
//可以通过${student.username}获取name属性值
public String getUsername{
return name;
}
}
EL表达式读取map集合
EL表达式读取 map集合
<%
Map<String, User> map= new HashMap<String, User>();
map.put("u1", new User("baoqiang1",35,"male",new Birthday(1988,12,23)));
map.put("u2", new User("baoqiang2",35,"male",new Birthday(1999,12,23)));
map.put("u3", new User("baoqiang3",35,"male",new Birthday(1900,12,23)));
request.setAttribute("map", map);
%>
${
requestScope.map.u1.name}
${
map.u1.name}
${
map.u3.birthday.month}
EL表达式-运算符
<%--EL表达式的运算符--%>
<%
int num = 0;
request.setAttribute("num", num);
%>
<%=num*10%>
${
3+2}
<%--El表达式使用的变量必须放在域中--%>
${
num+1}
<hr/>
${
3>2}
<hr/>
<%--
empty关键字
String 类型: 空串和null都为空
Java Bean对象: null为空
集合 : 集合中没有数据,则为空
--%>
<%
String str = null;
User user = null;
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
request.setAttribute("list", list);
%>
${
empty list}
Jstl概述
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。
JSTL标准标准标签库有5个子库,目前常使用的是他的核心库
Jstl标签库的使用
- 引入jstl
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
- <c:if>标签
起到java代码的判断的作用
<%--使用JSTL来简化以上代码--%>
<%
int a = 200;
int b = 500;
request.setAttribute("a", a);
request.setAttribute("b", b);
%>
<%--
test:测试条件成立
var: 用来保存条件的结果,true或者false
scope: 表示将结果存到哪个域中
--%>
<c:if test="${a > b }" var="bl" scope="session">
<h1 style="color: green">a大于b</h1>
<div></div>
</c:if>
<c:if test="${!(a > b) }">
<h1 style="color: red">a小于b</h1>
</c:if>
forEach标签
起到java代码的for循环作用
<%--
for标签:
1:普通for
for(int i=0; i<5; i++)
begin: 表示索引开始
end :表示索引结束,包含结束值
var :循环变量 i, jsp会自动的将该值存放在pageContext域中
step :每一次循环的增量
--%>
<%
request.getParameter("username");
int num = 10;
request.setAttribute("num", num);
%>
<c:forEach begin="0" end="${num}" var="i" step="1">
<h1 style="color: red;">helloword${
i}</h1>
</c:forEach>
<%--
items="${list}" 从域中根据list这个键获取集合对象
var="str" 每次循环时,jstl会自动将str的值存入pageContext域
varStatus="vs" 这个参数会记录当前循环的一些状态信息
vs.count 当前这次迭代从0开始的迭代索引,可以获取当前循环的次数
vs.index 当前这次迭代从0开始的迭代索引。
vs.current:当前这次迭代的(集合中的)项。
first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。
begin:begin属性的值。
end:end属性的值
step:step属性的值
--%>
<%
ArrayList<User> list2= new ArrayList<User>();
list2.add(new User("liuyan1",33,"female",new Birthday(1991,12,21)));
list2.add(new User("liuyan2",34,"female",new Birthday(1992,12,21)));
list2.add(new User("liuyan3",38,"female",new Birthday(1993,12,21)));
request.setAttribute("list2", list2);
%>
<c:forEach items="${list}" var="str" varStatus="vs">
<%--${
str}--%>
现在是第${
vs.count}次循环<br/>
</c:forEach>
<c:forEach items="${list2}" var="user">
${
user.name} ----${
user.birthday.year}<br/>
</c:forEach>
`` `