一.EL表达式
做用:EL :为了消除jsp中的Java代码html
1.语法java
${EL表达式}
a.EL不须要导包
b.在el中调用属性,实际上是调用的getXxx()方法
${范围.对象.属性.属性的属性 }
${requestScope.student.address.schoolAddress }数组
2.操做符:操做:属性,不是对象浏览器
. : 使用方便
[] : 若是是常量属性,须要使用双引号/单引号 引发来;比点操做符更增强大(能够访问数据,获取变量值)session
- []强大之处:
- a.能够容纳一些 特殊符号 (. ? -)
- b.[]能够容纳 变量属性 (能够动态赋值)
- String x =“a”; $ {requestScope.a}等价于$ {requestScope[“a”]}等价于${requestScope[x]}
- c.能够处理数组:${requestScope.arr[0] }
- 获取map属性
Map<String,Object> map = new HashMap<>();
map.put(“cn”,“中国”);
map.put(“us”,“美国”);
request.setAttrubute(“map”,map);
${requestScope.map.cn}
3.经过EL获取JSP 九大内置对象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
${pageContext.方法名去掉()和get而且将首字母小写} //上面的就是app
4.各内置对象的做用域jsp
<%// 向page做用域存入内容 pageContext.setAttribute("name", "张三"); // 同一页面中的信息 request.setAttribute("name", "李四"); // 一次请求有效的信息(例如servlet存入结果,jsp获取结果) session.setAttribute("name", "王五"); // 每一个用户(浏览器)独有的信息(例如购物车信息) application.setAttribute("name", "赵六"); // 适合放全局信息(城市信息, 类别信息) %> <!-- 从page做用域获取内容--> <%= pageContext.getAttribute("name")%> <!-- 从page做用域获取内容(推荐) --> ${ pageScope.name} <!-- 从request做用域取--> <%= request.getAttribute("name")%> <!-- 从request做用域取(推荐)--> ${ requestScope.name} <!-- 从session做用域取值 --> <%= session.getAttribute("name")%> <!-- 从session做用域取值(推荐) --> ${ sessionScope.name} <!-- 从application做用域取值 --> <%= application.getAttribute("name")%> <!-- 从application做用域取值(推荐) --> ${ applicationScope.name} <hr/> <!-- 在el表达式取做用域变量时,不加前缀,先搜索pageScope, 再搜索requestScope, 继续搜索sessionScope, 再搜索applicationScope--> ${ name}
二.JSTL (比EL更增强大)
- 须要引入2个jar :jstl.jar standard.jar
引入tablib :spa
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
其中prefix=“c” :前缀.net
核心标签库: 通用标签库、条件标签库、 迭代标签库code
1.通用标签库
1.<c:set>赋值
i:
在某个做用域之中(4个范围对象),给某个变量赋值
<%-- request.setAttribute(“name”, “zhangsan”) ; --%>
<c:set var=“name” value=“zhangsan” scope=“request”/>
${requestScope.name }
<c:set var=“变量名” value=“变量值” scope=“4个范围对象的做用域”/>
给普通对象赋值
在某个做用域之中(4个范围对象),给某个对象的属性复制 (此种写法,不能指定scope属性)
${requestScope.student.sname} //取出studen对象sname属性值 <c:set target="${requestScope.student}" property="sname" value="zxs" />
给map对象赋值
${requestScope.countries.cn} //取出countries对象cn属性值 <c:set target="${requestScope.countries}" property="cn" value="中国" />
<c:set target=“对象” property=“对象的属性” value=“赋值” />
注意 <c:set>能够给不存在的变量赋值 (但不能给不存在的对象赋值)
2.<c:out>显示
传统EL:$ {requestScope.student }
c:out方式:<c:out value ="$ {requestScope.student }"
c:out显示不存在的数据:<c:out value="$ {requestScope.stu}>" default=“zs-23”>
- true:<c:out value=‘百度’ default=“当value为空的,显示的默认值” escapeXml=“true” /> //将a标签内容以文字形式显示
- false:<c:out value=‘百度’ escapeXml=“false” /> //显示连接
3.<c:remove >:删除属性
<c:set var=“a” value=“aaa” scope=“request”/> //赋值
${a} // 赋值后显示
<c:remove var=“a” scope=“request”/> //删除
${a} //删除后再显示
2.条件标签库
1.选择
单重选择
<c:if test="${6>2}" var = "result" scope="request" ></c:if>
if else if… esle if… else /switch
<c:choose> <c:when test="${requestScope.role == '老师'}"> 老师代码 .... </c:when> <c:when test="${requestScope.role == '学生'}"> ==能够用 eq 代替 学生代码.... </c:when> <c:otherwise> 管理员其余人员.... </c:otherwise> </c:choose>
3.迭代标签库(循环)
for(int i=0;i<5;i++)
<c:forEach var=“name” items=" r e q u e s t S c o p e . n a m e s " > − {requestScope.names }" > - requestScope.names">−{name }-
</c:forEach>
//至关于 for(int i=0;i<5;i++) <c:forEach begin="0" end="5" step="1" varStatus="status" > ${status.index} </c:forEach> //至关于for(String str:names) <c:forEach var="name" items="${requestScope.names}"> ${name} </c:forEach> <c:forEach var="student" items="${requestScope.students }" > ${student.sname }-${student.sno } </c:forEach>