EL表达式
EL表达式和基本语法
- EL表达式:Expression Language表达式语言
- 目的:简化jsp中java代码开发,代替脚本表达式<%=username%>
- 它不是一种开发语言,是jsp中获取数据的一种规范
- 格式如: ${EL表达式} 等价于<%=pageContext.findAttribute(name)%>
EL的具体功能
获取简单数据
- 代码如下:
${username}
获取实体类对象中的属性值
- 代码如下:
${user.address.addr }
使用List和Map集合
- 代码如下
<h1>1.以数组的下标形式获取list值</h1> ${list[0]}<br> ${list[1]}<br> ${list[2]}<br> <h1>2.以提供的方法get(index)</h1> ${list.get(0)} <h1>3.使用El表达式获取map中的值(以key的形式获取)</h1> ${map.aa}<br> ${map.bb}<br> ${map.cc}<br> <h1>4.使用El表达式获取map中的值</h1> ${map['aa']}
使用EL表达式执行运算、empty关键字
- 代码如下
<!--算术运算--> ${10+20 }<br/> ${10-20 }<br/> ${10*20 }<br/> ${3%5}<br/> <!--关系运算--> ${10==9 }<br/> ${"abc"=="abc" }<br/> ${s1==s2 } equals<br/> ${s1 eq s2 }<br/> ${10>20}<br/> ${10 gt 20}<br/> ${5 < 10}<br/> ${5 lt 10}<br/> ${5 != 10}<br/> ${5 ne 10}<br/> <!--三目运算--> ${score>80?"优秀":"一般" }<br/> ${flag==0?"没有激活":flag==1?"激活":"删除" }<br/> ${sex==0?"男":"女" }<br/> <!--逻辑运算--> ${true && false}<br/> ${true || false}<br/> ${!true}<br/> ${true and false}<br/> ${true or false}<br/> ${not true}<br/> <!-- empty关键只要内容是空true --> ${empty s1}<br> ${empty list1}<br>
隐式对象(11个)
- JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP servlet和表达式中可用:
- pageContext:页面上下文,可以获取jsp中其他八个内置对象
- pageScope、requestScope、sessionScope、applicationScope表示四个域对象中集合
- param 表示request.getParameter(“username”); ${param.username}
- paramvalues 表示request.getPrameterValues(“hobby”); ${paramValues.hobby}
- header 表示 request.getHeader(“accept”); ${header.accept};
- headerValues 表示 request.getHeaderValues(“accept-encoding”); ${headerValues[“accept-encoding”][0]}
- cookie 表示 request.getCookies(); ${cookie.JSESSIONID}
- initParam 表示 ServletContext(application)初始化参数
JSTL
什么是JSTL
- JSTL:全称Java Server Pages Standard Tag Library,JSP标准标签库,代替jsp页面的脚本,实现逻辑控制。
JSTL的作用
- 实现JSP页面中逻辑处理。如判断,循环等;
使用JSTL
- 必须在JSP页面添加tablib指令库
- 下载JSTL库,https://archive.apache.org/dist/tomcat/taglibs/
- 把
jstl.jar
、standard.jar
放入WEB-INF/lib目录下- 代码示例:
<% @taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
常用标签介绍
通用标签set,out,remove
- 代码示例:
<!-- 基础标签:声明变量,输出变量,移除变量,变量默认值 --> <h3>基础标签:声明变量,输出变量,移除变量,变量默认值</h3> <!--1.声明变量k var:是变量名 value:变量的值(必须是EL表达式)--> <c:set var="k" value="${1+1}"></c:set> <!--2.输出变量k value:使用EL表示表示变量--> 移除前输出的内容:<c:out value="${k}"></c:out><br> <!--3.移除指定变量 --> <c:remove var="k"/> 移除后输出的内容:<c:out value="${k}"></c:out><br> <!--4.给指定变量赋默认值 --> 默认值:<c:out value="${m}" default="123456"></c:out>
条件标签if,choose
- 代码示例:
<!-- 条件标签:if choose --> <!-- test属性中是条件,但是条件需要使用EL表达式来书写 --> <h3>条件标签:if</h3> <c:if test="${8>2 }"> 8大于2是成立的 </c:if> <!-- 如果只是一个基本数据类型直接书写不需要${} --> <c:set var="m" value="5"></c:set> <c:if test="${m>3}"> 5大于3是成立的 </c:if> <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --> <h3>条件标签:choose(等价于java中switch)</h3> <!-- 测试成绩等级 >90 优秀 >80 良好 >70 中等 >60及格--> <c:set var="score" value="80"></c:set> <c:choose> <c:when test="${score>=90 }">优秀</c:when> <c:when test="${score>=80 }">良好</c:when> <c:when test="${score>=70 }">中等</c:when> <c:when test="${score>=60 }">及格</c:when> <c:otherwise>不及格</c:otherwise> </c:choose>
迭代标签foreach
- 代码示例:
<!-- 遍历for:输出1到10 的值 --> <!--var: 变量,把遍历的每一个值都存储在变量中进行输出 begin:开始 如果是变量使用EL表达式表示 end:结束 如果是变量使用EL表达式表示 step:间隔的长度 --> <c:forEach var="i" begin="1" end="10" step="2"> ${i}<br> </c:forEach>
<h3>测试list集合遍历获取学生列表</h3> <table border="1" width="80%" bordercolor="red" cellspacing="0" align="center"> <tr> <th>学号</th> <th>姓名</th> <th>成绩</th> <th>班级</th> <th>是否是第一个</th> <th>是否是最后一个</th> <th>计数count</th> <th>索引index</th> </tr> <!-- varStatus:变量状态:遍历出的每一项内容的状态: isFirst() first 第一个元素 isLast() last 最后一个元素 getCount() count 计数 重要的 getIndex() index 索引 --> <!-- var :遍历出的每一项使用变量先存储 items:集合(使用El表达式) --> <c:forEach var="stu" items="${students}" varStatus="vs"> <tr> <td>${stu.id}</td> <td>${stu.name}</td> <td>${stu.score}</td> <td>${stu.classes}</td> <td>${vs.first}</td> <td>${vs.last}</td> <td>${vs.count}</td> <td>${vs.index}</td> </tr> </c:forEach> </table>
url标签
- 语法:
<c:url var="" value="">
- 代码举例:
<c:url var="loc" value="/stu.jsp"> <c:param name="username" value="张三"></c:param> </c:url> <a href="${loc}">学生列表</a>