el表达式:
jsp内置的表达式语言
作用:代替脚本
脚本: <%%>
<%=%>
<%!%>
1、获取域中的数据:${域中的key值}
简单数据:${域中的key值}
注意:如果多个域中的key值一样 那么取出的顺序?
从范围小的开始查找,查找到以后就返回
如果没有查询到对应的key 返回""(空字符串)
根据域值取出数据
<%
pageContext.setAttribute("num", 5);
request.setAttribute("num", 1);
session.setAttribute("num", 0);
application.setAttribute("num", 2);
%>
<p>${ requestScope.num}</p>
<p>${ sessionScope.num}</p>
<p>${ applicationScope.num}</p>
<p>${ num}</p>
复杂数据:
数组:
${域中的key值[index]}
list:
${域中的key值[index]}
map:
正常:
${域中的key值.map中的key}
如果map的是特殊(数字等):
${域中的key值["key"]}
javaBean导航:
javaBean:我们编写的一个普通java类:
类似:User,Person……
javaBean规范:
1、必须是一个共有的类
2、提供私有字段
3、必须提供私有字段公共的getset方法(boolean :is)
4、必须提供无参构造
5、一般来说需要实现Serializable接口(序列化)
javaBean一般都存放在bean,domain,entity
${域中的key值.javabean属性}
javabean属性:就将get或set方法去掉头(set,get) 然后将首字母小写
2、el表达式的内置对象:pageContext
${ pageContext.request.contextPath} <!--获取项目的根路径-->
${pageContext.request.requestURI}<!-- 请求的url -->
${pageContext.request.queryString}<!-- 获取查询参数-->
${pageContext.request.method}<!-- 请求方式-->
${pageContext.request.protocol}<!-- http协议-->
${pageContext.request.serverName}<!-- 服务器名字-->
3、el中的保留字段
and eq gt div
or ne le mod
no lt ge true
instanceof empty null false
4、el执行运算
运算符:算数,关系,逻辑
算数:
+:只能进行加法,不能实现拼接
/:div
%:mod
关系:
> 或者 gt, 例如:${8>9} ?或者 ${8 gt 9 }
>= 或者 ge,?例如:${45>=9}?或者?${45 ge 9 }
< 或者 lt,?例如:${4<9}?或者?${4 lt 9 }
<= 或者 le,?例如:${9<=8}?或者?${9 le 8 }
== 或者 eq,?例如:${4==4}?或者?${4 eq 4 }
!= 或者 ne,?例如:${4!=3}?或者?${4 ne 3 }
逻辑:
&& 或者 and, 例如:${false && false} 或者 ${false and false }
|| 或者 or, 例如:${true || false} 或者?${true or false }
! 或者 not,例如:${!true}(相当于${false}) 或者?${not true }
empty:判断容器的长度是否为0
判断对象是否为空
<%
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
User user = null;
request.setAttribute("user", user);
request.setAttribute("list", list);
%>
${ empty list}
${ empty user}
jstl:
jsp标准的标签库语言
公司:apache 开源免费
作用:用来代替脚本
jstl标签库的分类:
核心标签:Core(掌握)
格式化标签:fmt(了解)
函数标签:fn(了解)
xml:(不用)
sql:(不用)
导入格式:taglib:导入标签库
<%@ taglib prefix="",uri="" %>
prefix:前缀(一个命名)
uri:标签路径
core:
if:条件判断
<c:if test="${ 1==1}" var="result" scope=""></c:if>
test:条件表达式(${})
var:接收条件表达式的结果
scope:var变量的作用范围
例如:
<c:if test="${ 1==1}" var="result" >
${result}
1 等于 1
</c:if>
类似switch功能:
<c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
choose:switch
when:case
otherwise:defalut
例如:
<c:choose>
<c:when test="${3>4}">
3>4
</c:when>
<c:when test="${3<4}">
3<4
</c:when>
<c:otherwise>
3 = 4
</c:otherwise>
</c:choose>
循环:<c:foreach>
<!-- begin:开始
end:结束
step:递增值
items:要遍历的对象
var:遍历结果
varStatus:循环状态-----count:当前执行的次数
对象:
index:
count:
first:
last:-->
<c:forEach begin="5" end="10" step="1" var="i" varStatus="vs">
${vs.index}<br>
${vs.count}<br>
${vs.first}<br>
${vs.last}<br>
变量值: ${i}<br>
</c:forEach>
遍历对象:
<c:forEach var="user" items="${list}">
变量值:${user.age} <br>
变量值:${user.userName} <br>
变量值:${user.gender} <br>
</c:forEach>
了解
<c:out>:<%=%> 输出
<c:set>:向域中设置值
例如:<c:set value="abc" var="msg" scope="request"></c:set>
value:值
var:key
scope:域
fn:函数标签
<c:set value="abc" var="msg" scope="request" ></c:set>
${fn:toUpperCase(msg)}
${fn:contains("aaabc","aaa" )}
fmt:格式化
<c:set var="now" value="<%=new Date()%>" scope="request"></c:set>
<p> <fmt:formatDate value="${now}" type="both"></fmt:formatDate></p>