文章目录
EL和JSTL
1.EL表达式概述
EL表达式就是表达式语言,它是Servlet规范中的一部分。它是从JSP2.0规范以后加入的内容。主要作用就是在JSP页面中获取数据。从而达到JSP脱离Java代码块和Java表达式
语法:${表达式}
通过刚才编写的案例可以得知,EL表达式其实就是从作用域中获取数据。以后在实际开发中,JSP只要充当视图,这时候EL表达式就会被大量使用。
2.EL表达式的使用
<body>
1234
<!-- 基本数据类型 -->
${a}
<!-- 引用数据类型 -->
${emp} <!-- 对象的地址 -->
${emp.eid }
${emp.ename }
${emp.sex }
${emp.age }
${emp.dept.dname }
<br/>
<!-- 集合类型 -->
${list[0].eid }
${list[0].ename }
${list[0].sex }
${list[0].age }
${list[0].dept.dname }
<hr/>
${list[1].eid }
${list[1].ename }
${list[1].sex }
${list[1].age }
${list[1].dept.dname }
<hr/>
${list[2].eid }
${list[2].ename }
${list[2].sex }
${list[2].age }
${list[2].dept.dname }
<br/>
<p>下面是map的数据</p>
${map.a.ename }
${map["a"].sex }
</body>
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String s= "这是后台的数据";
//基本数据放入在作用域中
req.setAttribute("a", s);
//对象数据放入到作用域中
Dept dept = new Dept();
dept.setDid(4001);
dept.setDname("研发部");
Emp emp = new Emp(1001, "张三", "男", 19,dept);
req.setAttribute("emp", emp);
//List类型
List<Emp> list = new ArrayList<Emp>();
Emp emp2 = new Emp(1002, "张三2", "男2", 192,dept);
Emp emp3 = new Emp(1003, "张三3", "男3", 193,dept);
list.add(emp);
list.add(emp2);
list.add(emp3);
req.setAttribute("list", list);
//map类型
HashMap<String, Emp> map = new HashMap<String,Emp>();
map.put("a", emp);
map.put("b", emp2);
map.put("c", emp3);
req.setAttribute("map", map);
//跳转到展示页面
req.getRequestDispatcher("WEB-INF/jsp/show.jsp").forward(req, resp);
}
3.EL表达式的运算符
3.1 算数运算符
注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${‘a’+‘b’}则会出现异常。
${9+8 }
${9-8 }
${9*8 }
${9/8 }
3.2 关系运算符
==(eq)
!=(ne)
<(lt)
>(gt)
<=(le)
>=(ge)
${9<=8 }
${9>=8 }
${9>8 }
${9<8 }
${9==8 }
${9!=8 }
<hr/>
${9 le 8 }
${9 ge 8 }
${9 gt 8 }
${9 lt 8 }
${9 eq 8 }
${9 ne 8 }
3.3 逻辑运算符有
&&(and)
||(or)
!(not)
${9==8 || 9>8 }
${9==9 && 8==8 }
${!(8==8) }
<hr/>
${9==8 or 9>8 }
${9==9 and 8==8 }
${not(8==8) }
3.4 三目运算符
<input type="radio" name="sex" value="男" ${emp.sex == "男"?"checked":"" }>男
<input type="radio" name="sex" value="女" ${emp.sex == "女"?"checked":"" }>女
3.5 特殊运算符
${empty emp.ename }
不为空则为false
为空则为true
4.JSTL
4.1 JSTL简介
它就是JSP中的标准的标签库。它是有Apache实现的。
它由 Core,Fmt,Functions,SQL,XML这五部分组成。最常用就是Core。
Core:核心标签库。一般开发中使用这个主要用于逻辑处理
Fmt:国际化相关的一部分。
Functions:EL函数库。里面提供了EL表达式可以使用的方法
SQL:用于操作数据库
XML:操作XML
注意:如果应用中需要使用JSTL表达式,那么需要引入Jar包。
4.2 JSTL的使用
<c:if test="${emp.age>=68 }">
老女人
</c:if>
<c:if test="${emp.age<68 }">
小姑娘
</c:if>
//c:if 进行判断。 根据test属性的值决定是否执行判断的代码块
<c:choose>
<c:when test="${emp.age<=14 }">
儿童
</c:when>
<c:when test="${emp.age>14 and emp.age<=18 }">
少女
</c:when>
<c:when test="${emp.age>18}">
成年
</c:when>
</c:choose>
// c:forEach 它是用来遍历集合的
//基本语法:
<c:forEach items="" var="emp" begin="" end="" step="" varStatus="">
</c:forEach>
// items:需要遍历的集合。它可以用EL表达式取出来的数据
// var:把当前遍历的元素放入到page作用域中。var属性的值当做作用域中的key,当前遍历的元素当做value
// begin:开始遍历的索引
// end: 结束遍历的索引
// step: 步长
// varStatus:它就是一个计数器的对象。只做两件事。记录索引和记录个数
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>部门</td>
</tr>
<c:forEach items="${list }" var="emp">
<tr>
<td>${emp.eid }</td>
<td>${emp.ename }</td>
<td>${emp.sex }</td>
<td>${emp.age }</td>
<td>${emp.dept.dname }</td>
</tr>
</c:forEach>
</table>
<c:forEach begin="0" end="8" var="pagenum" step="2" varStatus="vs">
页数:<a href="#">${pagenum }</a>
索引:${vs.index }
个数:${vs.count }
</c:forEach>
//c:set 用于保存数据
//主要属性:var:作用域中key ,value:作用域中的value,scope:存储在那个作用域中 默认page
<c:set var="username" value="张三"></c:set>
<c:out value="${username }"></c:out>