JavaWeb初级学习 之 EL表达式&JSTL表达式

一、EL表达式


1为什么会出现EL

在JSP2.0之后不建议使用JSP表达式和JSP脚本片段,建议使用EL表达式代替JSP表达式,使用JSTL代替JSP脚本片段


2.EL简介

EL的全称:Expression Language,表达式语言
EL的格式:${表达式}
EL主要用来将域对象中的属性输出到页面
EL表达式默认是全域查找 

先从page域中查找,找到直接返回,找不到再继续在其他域中找,如果在application域中也找不到则返回一个空串


EL为我们提供了四个Scope对象,用来获取指定域中的对象,这四个Scope对象是将域对象中的域单独拿了出来,这四个Scope对象分别是pageScope、requestScope、sessionScope、applicationScope
pageScope:用来获取page域中的对象
requestScope:用来获取request域中的对象
sessionScope:用来获取session域中的对象

applicationScope:来获取application域中的对象


如果域对象中的属性名比较特殊,可以通过以下方式获取域对象中的值:获取request域中的对象:${requestScope['hello-kitty']}
获取JavaBean中的属性值
EL表达式不能直接获取在JSP脚本片段中声明的对象,必须将对象放到域对象中才能获取
通过对象.属性名的方式获取JavaBean的属性值,此时是调用了getXXX方法
如果通过EL表达式获取的对象的属性还是一个对象,可以一直点下去
<!-- 获取Student中的name属性值 -->
<%
	Student stu = new Student(1,"孙悟空",520,new Address(1,"花果山"));
	//将stu放到域对象中
	request.setAttribute("stu", stu);
%>
${stu.han }
<hr>
<!-- 获取Student中的address属性值 -->
${stu.address.name }

3.EL中的十一个隐含对象

一个我们比较熟悉的
pageContext
类型:PageContext
作用:与JSP中的作用一样,一个顶JSP中的九个隐含对象,通过它可以获取JSP中的其他隐含对象

使用EL表达式获取request对象:

${pageContext.request}

使用EL表达式获取项目路径:

  ${pageContext.request.contextPath}


四个Scope对象

pageScope
类型:Map<String , Object>
作用:获取page域中的对象
requestScope
类型:Map<String , Object>
作用:获取request域中的对象
sessionScope
类型:Map<String , Object>
作用:获取session域中的对象
application
类型:Map<String , Object>

作用:获取application域中的对象


其他六个隐含对象
header 
类型:Map<String , String>
作用:获取请求头中的信息
headValues
类型:Map<String , String[]>
作用:获取请求头中一个键对象多个值的情况
param
类型:Map<String , String>
作用:获取请求参数
paramValues
类型:Map<String , String[]>
作用:获取请求参数中一个键对应多个值的情况
cookie
类型:Map<String , Cookie>
作用:根据cookie的名称获取Cookie对象
initParam
类型:Map<String , String>

作用:获取当前Web应用的初始化参数


4.EL中的运算

在EL表达式中可以直接进行加、减、乘、除等运算
在EL表达式中有一个我们常用的运算符:empty
empty与null有以下不同
空串时:null返回false;empty返回true
空集合时:null返回false;empty返回true
我们通常使用empty来判断一个字符串或集合是否为空


二、JSTL表达式


1.JSTL简介

JSTL的全称:JSP Standard Tag Library,JSP的标准标签库

2.标签库

core:核心标签库,我们又称它为c标签
fn:函数标签库,需要结合EL表达式使用,里面定义了一些对字符串的操作
fmt:格式化标签库,里面定义了对时间、日期、数字的国际化

3.核心标签库

又称它为c标签,使用它需要导入两个jar包
taglibs-standard-impl-1.2.1.jar          

taglibs-standard-spec-1.2.1.jar
要使用c标签还需要导入核心标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

常用的标签


out标签

<!-- out标签:用来向页面中输出一些内容 -->
<!-- value属性:用来设置要输出的内容,可以使用EL表达式 -->
<!-- default属性:用来指定当value属性值中是EL表达式并且无法输出内容时要显示的默认值 -->
<!-- escapeXml属性:用来设置是否解析xml标签,默认值是true,不解析标签,如果改为false,解析标签 -->
<c:out value="<h1>我要变大</h1>" default="你想输出的内容不存在" escapeXml="false"></c:out>

set标签

<!-- set标签:用来向域对象中添加属性 ,默认添加到page域中 -->
<!-- var属性:用来指定向域对象中添加属性的那个属性名 -->
<!-- value属性:用来指定添加到域对象中的属性值 -->
<!-- scope属性:用来设置添加到那个域中,可选值有:page,request,session,application -->
<c:set var="username" value="admin" scope="page"></c:set>
<c:set var="username" value="admin" scope="request"></c:set>
<c:set var="username" value="admin" scope="session"></c:set>
<c:set var="username" value="admin" scope="application"></c:set>
${pageScope.username }<br>
${requestScope.username }

remove标签
<!-- remove标签:用来将域对象中的属性移除,默认全域移除 -->
<!-- scope属性:用来设置要移除那个域中的属性,可选值有:page,request,session,application -->
<c:remove var="username" scope="page"/>
${pageScope.username }<br>
${requestScope.username }<br>
${sessionScope.username }<br>
${applicationScope.username }

if标签
<!-- if标签:与Java中的if语句类似 -->
<!-- test属性:接受一个布尔类型的值,如果为true才执行标签体中的内容 -->
<c:if test="${empty param.username }">
	请输入用户名:
</c:if>
<c:if test="${not empty param.username }">
	欢迎您,${param.username }
</c:if>

choose标签
<%
	int age = 40;
	request.setAttribute("age", age);
 %>

<!-- choose标签:与Java中的if..else语句类似 -->
<!-- 多个when标签只执行一个,所有书写是一定要注意多个when标签的顺序 -->
<!-- when标签和otherwise标签不能脱离choose标签单独使用 -->
<c:choose>
	<c:when test="${age > 30 }">
		大龄剩女
	</c:when>
	<c:when test="${age > 20 }">
		青春靓女
	</c:when>
	<c:when test="${age > 14 }">
		花季少女
	</c:when>
	<c:otherwise>
		小屁孩儿
	</c:otherwise>
</c:choose>

forEach标签
<!-- forEach标签:与Java中的for循环类似 -->
<!--
	begin属性:用来指定循环的开始,值不能小于0;end指定循环的结束;
	var属性:设置一个属性值用来接收每次遍历的数,而且每次遍历的数会保存到page域中,var的属性值就是page
	域中的那个属性名
-->
<!-- step属性:用来设置循环时的步长,默认值是1 -->
<c:forEach begin="1" end="10" var="index" step="1">
	<a href="#">${index }</a>
</c:forEach>

<%
	List list = new ArrayList();
	list.add("刘涛");
	list.add("蒋欣");
	list.add("王子文");
	list.add("杨紫");
	list.add("王凯");
	request.setAttribute("list", list);
%>
<!-- items属性:用来接收要变量的对象,通常是一个List -->
<c:forEach items="${list }" var="star">
	${star }
</c:forEach>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章