一、EL(Expression Language)表达式
语法结构:${var}
若要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true:
<%@ page isELIgnored ="true|false" %> 这样,EL表达式就会被忽略。若设为false,则容器将会计算EL表达式。
EL表达式的应用:
- 获取数据:用于替换Jsp中的脚本表达式,从web域中检索java对象、获取数据。
- 执行运算:执行一些基本的逻辑运算、关系运算、算术运算。
- 获取Web开发常用对象:利用EL定义的隐式对象,可以获得对web常用对象的引用,从而获取这些对象中的的数据。
- 调用java方法:EL允许自定义EL函数,可以通过EL表达式调用java类的方法。
1 <h3>EL表达式中使用二元表达式</h3> 2 <% 3 session.setAttribute("user",new User("孤傲苍狼")); 4 %> 5 ${user==null? "对不起,您没有登陆 " : user.username} 6 7 8 <% 9 List<String> emptyList = null; 10 %> 11 <%--使用empty运算符检查对象是否为null(空) --%> 12 <c:if test="${empty(emptyList)}"> 13 对不起,没有您想看的数据 14 </c:if>
EL表达式语言中定义了11个隐含对象,他们都是java.util.Map类型,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据
1 <br/>---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------<br/> 2 ${pageContext} 3 <br/>---------------2、pageScope对象:从page域(pageScope)中查找数据------------------------<br/> 4 <% 5 pageContext.setAttribute("name","张三"); //map 6 %> 7 ${pageScope.name} 8 <br/>---------------3、requestScope对象:从request域(requestScope)中获取数据------------------------<br/> 9 <% 10 request.setAttribute("name","李四"); //map 11 %> 12 ${requestScope.name} 13 <br/>---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------------<br/> 14 <% 15 session.setAttribute("user","xdp"); //map 16 %> 17 ${sessionScope.user}
EL表达式语言可以访问EL函数。EL函数实际上与Java类的方法对应,这个Java类必须定义为public类型,并且作为函数的方法必须声明为public static类型。当Java类定义好以后,应该在标签描述符(TLD)文件中,把Java类的方法映射为函数。
EL Function:
一般来说, EL自定义函数开发与应用包括以下三个步骤:
1、编写一个Java类的静态方法。
2、编写标签库描述符(tld)文件,在tld文件中描述自定义函数。
3、在JSP页面中导入和使用自定义函数。
详情参考:(1)http://www.cnblogs.com/xdp-gacl/p/3938361.html(1.5EL Function开发步骤)
(2)http://blog.csdn.net/goskalrie/article/details/51315397(自定义和使用EL函数)
二、JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库。
1、JSTL标签库包含四类:
- core:核心标签库,学习重点
- fmt:格式化标签库,只学习两个
- sql:数据库标签库,已过时,不学习
- xml:xml标签库,已过时,不学习
2、使用taglib指令导入标签库
除了JSP动作标签外,使用其他第三方的标签库都需要:(1)导包;(2)在使用标签的JSP页面中使用taglib指令导入标签库。
导入JSTL的core标签库:<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>
- prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c;
- uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;
3、核心标签库(core)
JSTL的核心标签库标签共13个,分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
(1)<c:out>标签主要是用来输出数据对象(字符串、表达式)的内容或结果。JSTL的使用是和EL表达式分不开的,<c:out>有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入<c:out>标签中。
(2)<c:set>标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。
<c:set value="赵五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>
<li>从Bean中获取对象person的name值:<c:out value="${person.name}"></c:out></li>
<li>从Bean中获取对象person的age值:<c:out value="${person.age}"></c:out></li>
(3)<c:remove>标签主要用来从指定的JSP范围内移除指定的变量。
(4)<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常。
(5)<c:if>标签和程序中的if语句作用相同,用来实现条件控制。
<%--使用if标签进行判断并把检验后的结果赋给adminchock,存储在默认的page范围中。 --%> <c:if test="${param.uname=='admin'}" var="adminchock">
(6)<c:choose>、<c:when>和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。 使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。
(7)<c:forEach>标签该根据循环条件遍历集合(Collection)中的元素。
(8)<c:import>该标签可以把其他静态或动态文件包含到本JSP页面,与<jsp:include>的区别为:<jsp:include>只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
(9)<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
(10)<c:redirect>该标签用来实现请求的重定向。同时可以配合使用<c:param>标签在url中加入指定的参数。
4、fmt标签库
fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字:
(1)格式化日期
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...... <% Date date = new Date(); pageContext.setAttribute("d", date); %> <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
(2)格式化数字
<% double d1 = 3.5; double d2 = 4.4; pageContext.setAttribute("d1", d1); pageContext.setAttribute("d2", d2); %> <fmt:formatNumber value="${d1 }" pattern="0.00"/><br/> <fmt:formatNumber value="${d2 }" pattern="#.##"/>
5、自定义JSTL标签
详见:http://blog.csdn.net/qq_25827845/article/details/53311722(自定义标签)
以上均为简单学习的过程。
参考资料:
EL:
(1)http://www.runoob.com/jsp/jsp-expression-language.html
(2)http://blog.csdn.net/goskalrie/article/details/51315397
(3)http://www.cnblogs.com/xdp-gacl/p/3938361.html
(4)http://blog.csdn.net/qwerasdf123/article/details/4189889
JSTL:
(5)http://www.runoob.com/jsp/jsp-jstl.html
(6)http://blog.csdn.net/qq_25827845/article/details/53311722
(7)http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html
(8)http://www.cnblogs.com/xdp-gacl/p/3943390.html