欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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:格式化标签库:对日期,数字格式化**