EL与JSTL
1.什么是EL?
-EL(Expression Language)表达式语言。
EL主要用于查找作用域中的数据,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为。
-EL基本格式
EL表达式的格式:用美元符号($)定界,内容包括在花括号({})中;
例如: ${loginInfoBean.suser}
也可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值;
例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}
-EL语法组成-标识符
EL表达式由标识符、存取器、文字和运算符组成。
标识符用来标识存储在作用域中的数据对象。EL 有 11 个保留标识符,对应于 11个EL隐式对象。除了11隐式对象外,假定所有其它标识符都用来标识作用域的变量。
-EL隐藏对象
pageContext PageContext 实例对应于当前页面的处理
pageScope 与页面作用域属性的名称和值相关联的Map类
requestScope 与请求作用域属性的名称和值相关联的Map类
sessionScope 与会话作用域属性的名称和值相关联的Map类
applicationScope 与应用程序作用域属性的名称和值相关联的Map类
param 按名称存储请求参数的主要值的 Map 类
paramValues 将请求参数的所有值作为 String 数组存储的 Map 类
Header 按名称存储请求头主要值的 Map 类
headerValues 将请求头的所有值作为 String 数组存储的 Map 类
cookie 按名称存储请求附带的 cookie 的 Map 类
initParam 按名称存储 Web 应用程序上下文初始化参数的Map类
-EL存取器
存取器用来检索对象的特性或集合的元素。
存取器: 通过 “[]” 或 “.” 符号获取相关数据
-EL运算符
运算符允许对数据和文字进行组合以及比较。
1)算术运算符 +、-、、/(或 div)和 %(或 mod)*
2)关系运算符 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)
3)逻辑运算符 &&(或 and)、||(或or)和 !(或 not)
4)验证运算符 empty
5)验证运算符(empty):对于验证数据特别有用。empty 运算符采用单个表达式作为其变量(也即,${empty input}),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为 null 的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的 String 求值所得的结果,则 empty 运算符也将返回 true。
2.什么是JSTL?
*JSTL( JSP Standard Tag Library)是JSP标准 标签库,由apache实现。*
*!!!–如果要使用JSTL,则必须引用jstl.jar和 standard.jar两个包。–!!!*
-为什么要使用JSTL
JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet、表达式和声明)代码用来实现相关逻辑控制。看下面程序。但这样做会带来如下问题: jsp维护难度增加; 出错提示不明确,不容易调试; 分工不明确;(即jsp开发者是美工,也是程序员); 最终增加程序的开发成本; 解决上面的问题可以使用定制标记库,JSTL使JSP开发者可以减少对脚本元素的需求,甚至可以不需要它们,从而避免了相关的维护成本。使分工更明确。
-JSTL部署
在EE应用程序中部署JSTL有两种方式:
已存在的工程上部署
将jstl.jar和standard.jar两个包考到现有工程 WebRoot / WEB-INF / lib 目录下 将相关的 .tld文件考到现有工程 WebRoot / WEB-INF 目录下;
也可通过eclipse在已存在
工程上部署
新建工程的时候直接部署
在JSP使用JSTL-core标签库
core在jsp中的使用:
在 web.xml 中添加<jsp-config>
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
在jsp文件中添加
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core”prefix=“c” %>
或
<%@ taglib uri=”/WEB-INF/c.tld” prefix=”c”%>
Core的操作作用域变量标签
获取输出作用域中变量.
<c:out > 属性: value [default] [escapeXml]
定义作用域中变量
<c:set > 属性: value var [scope]
删除作用域中变量
<c:remove > 属性: var [scope]
Core的条件控制标签
单分支条件
<c:if > 属性:test [var] [scope]
多分支条件
<c:choose >
<c:when > 属性: test
<c:otherwise >
Core的其它标签
输出转换成的URL:
<c:url > 属性:value [context] [var] [scope]
和<jsp:include >相似用于包含其它页面的内容:
<c:import >属性:url [context] [charEncoding] [var] [scope]
重定向
<c:redirect >属性: url [context]
与<c:url><c:import><c:redirect>配合使用,用于传参
<c:param >属性: name value
Core的循环控制标签
实现简单循环
<c:forEach > var='item' begin='5' end='10' step='2‘ varStatus=‘’
实现迭代(遍历)
<c:forEach > items='' var='item‘ varStatus=‘’
属性varStatus和var相似设置一个作用域变量;只是varStatus作用域变量中存的是包括运行状态的对象;此对象包含如下属性:
current index count first last begin end step
简单循环
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>testjstl1</title>
</head>
<body>
<c:forEach var="i" step="1" begin="1" end="100">
${i} <br>
</c:forEach>
</body>
</html>
循环迭代
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>testjstl1</title>
</head>
<body>
<c:forEach var="mcBean" items="${mcList}" varStatus="mcStatus">
当前遍历索引:${mcStatus.index} ; 商品名:${mcBean.sname} ; .... <br>
</c:forEach>
</body>
</html>
在JSP使用JSTL-format标签库
format在jsp中的使用:
在 web.xml 中添加
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
</jsp-config>
在jsp文件中添加
<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jstl/fmt” %>
使用
<fmt:formatDate value=“” pattern=“yyyy-MM-dd” />
Format常用标签
格式化输出日期:
<fmt:formatDate > value type var pattern
type取值:
short: 10/19/00 6:07 PM
medium: Oct 19, 2000 6:07:01 PM
long: October 19, 2000 6:07:01 PM MDT
full: Thursday, October 19, 2000 6:07:01 PM MDT
例: <fmt:formatDate value=“” pattern=“yyyy/MM/dd” />
格式化输出数字:
<fmt:formatNumber> value var pattern
例:<fmt:formatNumber value=“” pattern=“###.##” />
-EL和JSTL关系
* JSTL在赋值时会大量用到EL表达式。可以简单理解成,EL只是JSTL中的一部分。*
-作用
*简化jsp页的书写;削弱jsp中调用servlet的java代码,便于分层控制。只要是jsp能够完成的功能使用JSTL和EL表达式都可以完成。包括从和Servlet的数据交互、操作XML、格式化数据显示以及样式显示(控制表格的偶数行使用不同的颜色显示等)、Request中读取数据、控制循环(数组、Map等)、支持函数处理(trim、substring、join等)、还可以自定义函数等、操作数据库(违背分层原则,一般不这么使用)。*