el和jstl表达式
程序员文章站
2022-03-24 11:38:06
...
JSP中的el和jstl表达式
回顾:
1.开发项目步骤
2.学生(注册,登录,修改密码,修改用户信息,注销)
老师(登录,修改密码,管理学生(展示所有学生信息,删除学生信息,修改学生))
3.前端跳转到Servlet中
form表单(get/post)
超链接(get)
window.location(get)
window.location.href(get)
location.href(get)
4.后台servlet跳转到前端:
转发
重定向/三秒跳转
今天的内容:
1.EL表达式:
expression language表达式语言,可以直接在jsp页面上用.作用:可以直接从四大范围(page->request->session->application)内取出值.
1.1:el表达式的语法:${Key}
1.2:如果el表达取值时不带范围,依次从page->request->session->application寻找Key 所对应的value,如果从page范围内找到值,就不会再从后面的范围寻找.
1.3:如果el表达按指定范围内取值时,如果这个范围内找到这个key所对应的值就显示,否 则就不显示.
eg:<!-- 在指定范围内存值 -->
<h2>${pageScope.sname }</h2>
<h2>${requestScope.sname }</h2>
<h2>${sessionScope.sname }</h2>
<h2>${applicationScope.sname }</h2>
1.4:如果${Key}的Key不存在或者通过key得到null或""的值就不显示不报错不占页面位 置,不会报null.
1.5:在el表达式中可以直接用java中运算符.
1.6:判断el表达式中值是否是null或""用: ${empty key}或${!empty key}
1.7:el表达式有自动类型转换作用
eg:<%
//将数据存在page范围内
pageContext.setAttribute("sname", "吴鹏程");
//同一个范围内Key名相同,value覆盖
pageContext.setAttribute("sname", "唐志亮");
//将数据存在request范围内
request.setAttribute("sname", 18);
//将数据存在session范围内
session.setAttribute("sname", "man");
//将数据存在application范围内
application.setAttribute("sname", "爱好女");
//将对象存在request范围内
Student student1=new Student("悌子君", "123456", "man", "[email protected]", "rap", "西安");
request.setAttribute("stu1", student1);
//将list集合存在request范围内
//创建集合
List<Student> stuList=new ArrayList();
//向集合中添加元素
stuList.add(new Student("aa", "123456", "man", "[email protected]", "rap", "西安"));
stuList.add(new Student("bb", "123456", "man", "[email protected]", "rap", "西安"));
stuList.add(new Student("cc", "123456", "man", "[email protected]", "rap", "西安"));
request.setAttribute("stuList1", stuList);
/*
在java的泛型集合中这三种声明都可以
Map<String,String> map1=new HashMap();
Map<String,String> map1=new HashMap<>();这种创建集合的方式,注意有的版本el表达式识别不了
Map<String,String> map1=new HashMap<String,string>();
*/
//将map集合存在request范围内
//创建集合
Map<String,String> map1=new HashMap();
//向集合中添加元素
map1.put("k1", "杨森林");
map1.put("k2", "段怡豪");
request.setAttribute("map2", map1);
//将map集合的key存数字类型存在request范围内
Map<Long,String> map4=new HashMap();
//向集合中添加元素
map4.put(2l, "张俊飞");
request.setAttribute("map3", map4);
%>
<!-- 用el表达式取出page范围内的值 -->
<h1>${sname}</h1>
<!-- 用el表达式取出request范围内的值 -->
<h1>${sage}</h1>
<!-- 用el表达式取出session范围内的值 -->
<h1>${ssex}</h1>
<!-- 用el表达式取出application范围内的值 -->
<h1>${shobby}</h1>
<!-- 在指定范围内存值 -->
<h2>${pageScope.sname }</h2>
<h2>${requestScope.sname }</h2>
<h2>${sessionScope.sname }</h2>
<h2>${applicationScope.sname }</h2>
<!--用el取出对象的属性值 -->
<h3>姓名:${stu1.name },性别:${stu1.sex }</h3>
<h3>${stu1.toString() }</h3>
<!-- el取出对象输出时,会自动调用对象toString() -->
<h3>${stu1 }</h3>
<!-- 用el表达式取出list集合中元素 -->
<h1>${stuList1[0]}</h1>
<!-- 用el表达式取出list集合中元素的属性 -->
<h1>${stuList1[0].name}</h1>
<!-- 用el表达取出map集合中元素 -->
<h1>${map2["k1"] }</h1>
<h1>${map2.k1 }</h1>
<!-- el中直接用运算符 -->
<h1>${1+6-1 }</h1>
<h2>${1<2&&3<4 }</h2>
<!-- el中判断key为不为空 -->
<h1>不为空的判断:${!empty kk }</h1>
<h1>为空的判断${empty kk }</h1>
<!-- el表达式中+只有算术运算作用 -->
${"1"+1 }
<!-- el表达式只支持map集合的key用Long或String不支持Integer -->
<h1>${map3[2] }</h1>
2.JSTL:
全称JavaServerPages Standard TagLibrary,JSP标准标签库.作用:简化jsp页面.
2.1:jstl使用步骤:
2.1.1:导包:jstl.jar, standard.jar
2.1.2:在jsp页面导入标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2.1.3:jstl的使用.
2.2:jstl的通用标签(了解):
eg:<!-- 声明变量并赋值的标签 -->
<c:set var="sname" value="张三" ></c:set>
<!-- 输出标签 -->
<c:out value="${sname }"></c:out>
<h1>用el取出的值:${sname }</h1>
<!-- 删除变量的值的标签 -->
<c:remove var="sname"></c:remove>
<h2>用删除标签后的值为:${sname }</h2>
2.3:jstl选择标签:
2.3.1:if选择标签:<c:if test="条件">代码</c:if>
eg:<c:if test="${1>2 }">
<h1>1小于2</h1>
</c:if>
2.3.2:choose选择标签:choose相当于java中多重if选择结构
<c:choose>
<c:when test="条件1">代码块1</c:when>
<c:when test="条件2">代码块2</c:when>
<c:when test="条件3">代码块3</c:when>
<c:otherwise>上面所有条件不成立时,就执行的代码块</c:otherwise>
</c:choose>
eg:<!-- choose相当于java中多重if选择结构 -->
<c:set var="score" value="59"></c:set>
<h1>
<c:choose>
<c:when test="${score>=90 }">优秀</c:when>
<c:when test="${score>=80 }">良好</c:when>
<c:when test="${score>=60 }">及格</c:when>
<c:otherwise>再接再厉</c:otherwise>
</c:choose>
</h1>
2.4:jstl循环标签:
2.4.1:foreach当前for循环来使用:
<c:forEach var="当前遍历变量名" begin="起始值" end="终止值" step="叠加值">
代码
</c:forEach>
eg:<!-- for循环使用:从1输出10 -->
<c:forEach var="num" begin="1" end="10" step="2">
${num }
</c:forEach>
2.4.2: foreach循环使用
<c:forEach var="指代当前遍历元素" items="集合/数组" varStatus="stutus">
索引:${stutus.index }-当前遍历的元素的值:${指代当前遍历元素 }
</c:forEach>
eg:<%
List<String> names=new ArrayList();
names.add("张三");
names.add("李四");
names.add("王二麻子");
request.setAttribute("stuNames", names);
%>
<h1>
<c:forEach var="stu" items="${stuNames }" varStatus="stutus">
${stutus.index }-${stu }
</c:forEach>
</h1>
3.(扩展)函数标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
eg:<!-- 函数标签库的使用:相当java中String类常用方法 -->
<h2>${fn:contains("我是千锋人","千锋") }</h2>
<h2>${fn:length("abdfefe") }</h2>
<h2>${"abc" eq "abc"}</h2>
<h2>${"abc" == "abc"}</h2>
格式化标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
eg:<!-- 格式化标签库的使用 -->
<%
Date today=new Date();
request.setAttribute("time1", today);
%>
<!-- 格式化日期 -->
<h1><fmt:formatDate value="${time1 }" pattern="yyyy-MM-dd HH:mm:ss"/></h1>
<!-- 保留两位小数,四舍五入 -->
<h2><fmt:formatNumber value="3.1465926" pattern="0.00"></fmt:formatNumber></h2>
<!-- 将小数转换为百分比 -->
<h2><fmt:formatNumber value="0.4267" pattern="0.00%"></fmt:formatNumber></h2>
**总结
1.el:表达式语言,作用简化jsp,它可以从四大范围取值
1.1.${key}
1.2.没有指定范围,从小到大范围取值,如果指定范围,就只从当前范围取值.
1.3.如果值不存在或为null,就不显示不报错.
1.4.可以直接使用运算符
1.5:用${empty key}来进行空判断
1.6:el表达式有自动类型转换作用.
2.jstl:jsp标准标签库
2.1:核心标签库:选择标签和循环标签
2.2:函数库:字符串常用方法
2.3:格式化标签库:对日期,数字格式化**