一、EL是什么
-
全称是Expression Language,即表达式语言,用来简化jsp页面的,可以替换掉页面中的java代码
-
案例
<%--第一个是: <%=( (Map)request . getAttribute( "map")). get( "Monday" )%>--%> 第一个是:${requestScope.map.Mod} 第二个是:${requestScope.map["Tus"]} <%--使用EL表达式获取没有的数据,不会显示NULL,页面不显示内容--%> 第四个是:${requestScope.map.Thu}
-
语法:${}
-
获取数据:圆点或[]
-
${requestScope.map.Monday}和{requestScope.map["Monday'"]}是等价的,都是在request范围内查找map,取其Monday属性
-
-
数据的范围
-
${uname}: 告诉web服务器,先在page范围内查找有没有uname,如果没有找到继续到request范围内查找,如果没有找到继续到session范围内查找,如果没有找到,继续到application范围内查找,如果还没有找到,会返回null, 在页面上显示为""
-
如果在某一范围内找到了要查询的数据,就不会继续向下查找了
-
我们在程序中- -般要加上相应的数据范围: ${requestScope.uname}
-
四大范围
-
pageScope:在page范围内查找
-
requestScope:在request范围内查找
-
sessionScope:在session范围内查找
-
applicationScope:在plication范围内查找
-
-
-
获取请求参数
-
${"20" + 20}结果是40, EL表达式对数据类型的要求很宽松,自动进行类型转换
如果想要拼接: ${"20"}${20}
-
二、
-
jstl (jsp standard tag library),jsp的标准标签库,它是sun公司制定 的一套开发前端页面的标签,主要用来弥补html的不足,以及替换掉jsp中的逻辑代码,使用时- -般需要配合EL表达式
-
使用jstl
1.先导包: jst.jar standard.jar
2.引用标签:在要使用jstI的jsp页面通过标签指令引入标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
■prefix: 标签前缀
3.在jsp页面使用标签
-
使用标签
<%@ page import="com.jxd.model.Emp" %> <%@ page import="java.util.List" %><%-- Created by IntelliJ IDEA. User: Administrator Date: 2022/5/9 Time: 15:37 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <%--1.<c:set>:把某个数据存入某个范围内,或者说在某个范围内设置变量 --%> <%--语法:<c:set var="变量名" value="变量值" scope="四大范围之一" --%> <c:set var="uname" value="李四" scope="page"></c:set> <%--2.<c:out>:用来输出数据(字符串或EL表达式)--%> <%--我们曾用java语言在jsp页面输出数据<%=%>或<%out.print()%>,完全可用此标签替换--%> <%--输出page范围内的uname--%> <c:out value="${pageScope.uname}"></c:out> <br> <c:set var="age" value="20" scope="request"></c:set> age的值为:<c:out value="${requestScope.age}"></c:out> <br> <%--3.<c:remove>:移除某一范围内的数据--%> <%--语法:<c:remove var="要移除的变量名" scope="四大范围之一">--%> <%--移除请求范围内的age变量--%> <c:remove var="age" scope="request"></c:remove> 移除后age的值为空:<c:out value="${requestScope.age}"></c:out> <%--4.<c:redirect>:客户端重定向标签--%> <%--执行了重定向或转发,该页面中的内容就不可见--%> <%--<c:redirect url="http://www.baidu.com"></c:redirect>--%> <%--5.<c:if>:判断标签,作用和if一样,用来实现条件控制--%> <%--语法:<c:if test="判断条件,一般为EL表达式">--%> <%--当page范围内的uname值为admin,则跳转到百度--%> <c:if test="${pageScope.uname == '张三'}"> <c:redirect url="http://www.baidu.com"></c:redirect> </c:if> <br> <%--6.<c:choose></c:choose>:用于在众多选项中做出选择--%> <c:choose> <c:when test="${pageScope.uname == '张三'}"> 我是张三 </c:when> <c:when test="${pageScope.uname == '李四'}"> 我是李四 </c:when> <c:otherwise> 我既不是张三,也不是李四 </c:otherwise> </c:choose> <br> <%--7.<c:forEach>:循环标签,作用和foreach一样,都是用来遍历数据的--%> <%--语法: <c:forEach var="变量名,用来存储从集合中取出的元素" items="要遍历的集合" begin="开始下标,默认从0开始" end="结束下标" step="循环步长,默认是1" varStatus="表示集合中每个元素的相关信息" > </c:forEach> varStatus: index: 当前元素下标 count:循环了几次 first:是否是第一个元素 last:是否是最后一个元素 --%> <c:forEach var="i" begin="1" end="10" step="1"> <span><a href="#">${i}</a></span> </c:forEach> <table border="1px" width="60%" cellspacing="0"> <tr><td>员工编号</td><td>姓名</td><td>性别</td><td>入职日期</td></tr> <c:forEach var="emp" items="${requestScope.emps}" varStatus="empInfo"> <tr> <td>${emp.empno}</td> <td>${emp.ename}</td> <td>${emp.sex}</td> <td>${emp.hiredate}</td> <td>${empInfo.index}---${empInfo.count}--${empInfo.first}--${empInfo.last}</td> </tr> </c:forEach> </table> </body> </html>