1 el表达式
作用:
简化jsp代码
语法:
${key}
注意点:
1.使用el表达式获取数据时,该数据必须存在于某个域中
2.如果多个域中存在相同的key值,那么会根据范围从小到大依次查找
判断:empty 、== 、not empty 、!=
不使用el表达式获取userList集合
<%
List<User> userList = null;
Object obj = session.getAttribute("userList");
userList = (List<User>)obj;
%>
使用el表达式
userList:${userList}
判断:
<%
session.setAttribute("uname","juni");
%>
username:${not empty uname}
2 jstl
为什么需要jstl:
el表达式无法实现业务逻辑上的判断,因此需要结合jstl来操作
jstl是什么:
标准的标签库
jstl的使用:
1.想要使用标签库,需要引入两个jar包,标签库和标准库
2.在需要使用的页面中将core类库引入进来
引入core类库的语法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
taglib 指令,用于引入核心类库的地址
uri 指定地址
prefix 别名
常见的jstl标签:
<--var 变量名,也相当于是一个key
value 指定值
scope 指定存储的作用域
default 默认值-->
1.c:set 和 c:out
request.setAttribute("uname","juni")相当于下面的set标签
<c:set var="uname" value="juni" scope="request"></c:set>
移除前<c:out value="${uname}" default="null"></:out>
<c:remove var="uname"/>
移除后:<:out value="${uname}" default="null"></:out>
2. c:if 做判断
test属性中只能写Boolean类型的值
<c:if test="${not empty uname}">
用户名为null
</c:if>
3. c:foreach 循环
items 指定要遍历的集合对象
var 指定每次遍历的对象的别名
begin 开始下标 i=0
end 结束下标 list.size()-1 包含end的值
step 阶梯 i++
varStatus 指定下标的别名
遍历list集合:
<%
List<String> strList = new ArrayList<>();
strList.add("java");
strList.add("java script");
pageContext.setAttribute("strList",strLsit);
%>
<c:forEach items="${strList}" var="str" varStatus="status">
${str},${status.index}<br>
</c:forEach>
遍历set集合:
<%
Set<String> set = new HashSet<String>();
set.add("liubei");
set.add("guanyu");
set.add("zhangfei");
pageContext.setAttribute("set",set);
%>
<c:forEach items="${set}" var="str">
${str}<br/>
</c:forEach>
遍历map集合:
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("username","jack");
map.put("sex","man");
map.put("address","China");
PageContext.setAttribute("map",map);
%>
<:forEach items="${map}" var="user">
${user.key},${user.value}<br/>
</c:forEach>
3 jsp中常见动作标签
<jsp:include> 动态包含
<jsp:forward> 请求转发
<jsp:param> 设置请求参数
<jsp:useBean> 创建一个对象
<jsp:setProperty> 给指定的对象属性赋值
<jsp:getProperty> 取出指定对象的属性值