1.1 EL表达式和JSP脚本表达式
EL表达式形式: ${ }
${person.userName} ${userName}
JSP表达式形式:<%= userName%>
一个<div>元素的style属性的代码:
JSP表达式设置: 1 < div style =<%=mystyle% > >hello </ div >
EL表达式设置: 1 < div style =${mystyle} > hello </ div >
EL表达式不能在脚本中定义变量
JSP中定义一个变量,只需要用<%! int num=10%>
num的值:<%=num%> 值为10;
num的值:${num} 返回一个未定义的值;
1.2在EL表达式中使用隐式变量
类别 | 隐式变量名 | 描述 |
JSP | pageContext | 用来访问JSP的隐式对象 |
作用域 | pageScope | 与page作用域属性的名称和值相关联的 Map 类 |
requestScope | 与request作用域属性的名称和值相关联的 Map 类 | |
sessionScope | 与session作用域属性的名称和值相关联的 Map 类 | |
applicationScope | 与application作用域属性的名称和值相关联的 Map 类 | |
请求参数 | param | 包含请求参数字符串的Map 类 |
paramValues | 包含请求参数字符串数组( String[])的 Map 类 | |
请求头 | header | 包含请求头字符串的 Map 类 |
headerValues | 包含请求头字符串数组(String[])的 Map 类 | |
Cookie | cookie | 按名称存储请求附带的 cookie 的 Map 类 |
注意:pageScope,requestScope,sessionScope,applicationScope这些变量并没有直接赋予我们在EL中直接访问真正的page,ServletRequset,HttpSession以及ServeltContext的权利,他们返回的只是一个分别与page作用域,request作用域,session作用域,application作用域有关的属性名和值的Map对象。
当容器解析EL表达式中的变量时,例如${x}中的x,容器首先检查隐式变量。如果隐式变量中找不到x,他将依次查找page,request,session,application范围的属性,如果还找不到x,则返回null。
1.3 EL运算符
运算符可以分为四类:属性和集合访问运算符,算术运算符,关系运算符,逻辑运算符。
1.3.1用于访问属性和集合的EL运算符
属性访问运算符是我们可以访问对象的成员,集合访问运算符可以返回Map,List 或Array中的元素。
1.3.2 EL算数,关系,逻辑运算符
1.3.2.1 算术运算符就是加减乘除取模;
1.3.2.2 关系运算符
1.3.2.3 逻辑运算符
1.3.2.4 其他
empty运算符:检查对象是否为null(空)
二元表达式:${user!=null?user.name :""}
1.4 函数
EL函数使用起来比较复杂,但是他为JSP提供了完全的业务逻辑和表现逻辑分离。
使用EL函数的步骤
–方法类(.java):包含需要在JSP中使用的Java方法;
–标记库描述文件(*.tld):映射每个Java方法到XML函数名;
–部署描述文件(web.xml):映射TLD到标记库URI
JSP页面(*.jsp):使用标记库URI和函数名调用方法
二 JSP自定义标记库与标准标记库JSTL
JSTL(JSP标准标准库,JavaServlet Page Standard Tag Liabary )
jstl规范是SUN JCP指定的一个官方java规范请求(JSR).
JSTL标准标记库
功能范围 | 作用 | URI | 前缀 |
核心(core) | 一般用途处理的标记 | http://java.sun.com/jsp/jstl/core | c |
xml | 解析、选择、转换XML数据的标记 | http://java.sun.com/jsp/jstl/xml | x |
数据库(sql) | 访问关系型数据库的标记 | http://java.sun.com/jsp/jstl/sql | sql |
国际化(I18N) | 为国际化应用格式化数据的标记 | http://java.sun.com/jsp/jstl/fmt | fmt |
函数(Functions) | 处理字符串和集合的标记 | http://java.sun.com/jsp/jstl/functions | fn |
我们最常用的是核心标记库。
为了给JSP提供JSTL能力,我们需要两个JAR文件。第一个文件是jstl.jar,他为JSTL标记库提供API类。
第二个文件是standard.jar,他提供了标记库的实现类。我们需要把这两个文件复制到我们自己的应用程序的WEB-INF下的lib目录。
我们需要在JSP中通过taglib指令引用标记库。
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2.3.1 JSTL条件处理
2.3.2 循环
1 <c:if> <c:choose>条件处理
2 <c:forEach> <c:forTokens> 循环
2.4 用JSTL访问URL信息
2.4.1 <c:url> 重写URL并对其参数编码
2.4.2 <c:import> 访问Web应用程序之外的内容
2.4.3 <c:redirect> 重定向到不同的URL