EL表达式
EL表达式语言,提供了在JSP中简化表达式的方法,是一种简单语言。不需要加任何jar包 ,不依赖任何其它库。提供了在脚本元素范围外使用运行表达式的功能。
基本语法: ${ expression }
示例:
${user.name}等价于
<% User user=(User)session.getAttribute(“user”);
String name=user.getName();
out.println(name);%>
EL表达式优点:
减少Java代码的编写量,提高编码效率,简化JSP页面编写。提供自动类型转换的功能。
${param.count + 20}
等价于
<% String str_count = request.getParameter(“count”);
int count = Interger.parseInt(str_count );
count = count + 20;
out.println(count);
%>
EL提供.和 []两种运算符号来存取数据
.用于获取简单属性:${ user.name}
[]用于获取带索引的属性:${ shoppingCart[0].price }
例如:users对象中含有一个数组属性cooks[] ;取出其第一个元素的值,语法格式为:${user.cooks[0]}
获取对象属性的值,使用[]还可以写成: ${user["nam"]}
又如获取客户端发送过来的header中的User-Agent值 :${header["User-Agent"]},此时若使用:${header.User-Agent}会被服务器解析为header.User减去Agent的值
EL中的隐含对象
pageScope | 取得page范围的属性名称所对应的值 |
requestScope | 取得request范围的属性名称所对应的值 |
sessionScope | 取得session范围的属性名称所对应的值 |
applicationScope | 取得application范围的属性名称所对应的值 |
param | 如同request.getParameter(String name),返回String值 |
paramValues | 如同reqeust.getParameterValues(String name);返回String[]值 |
EL隐含对象的使用
访问request对象属性:${requestScope.user.name},如果省略隐含对象,则EL表达式将按照如下顺序寻找user对象: pageScope→requestScope→sessionScope→applicationScope
<%request.setCharacterEncoding("gbk"); %>
用户名:${param.nam }<br>
爱好:${paramValues.cooks }
EL支持的关系运算符
运算符 | 说明 | 范例 | 结果 |
&& 或 and | 交集 | ${A && B} 或 ${A and B} | True/ False |
||或 or | 并集 | ${A || B} 或 ${A or B} | True/ False |
!或not | 非 | ${ !A } 或 ${not A} | True/ False |
Empty | 判断值是否为null | ${empty param.name} | True/ False |
${A ? B : C} | 条件判断 | 当A为true,执行B,否则执行C | |
( ) | 优先权 | 对算术和逻辑运算符的执行优先权 |
JSTL标签库
JSTL全称JavaServer Pages Standard Tag Library,即JSP标准标签库,JSTL是一个标准的已经制定好的标签库,可以用到各种领域,如:基本输入输出、流程控制、循环、XML文件解析、数据库查询及国际化应用等。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入java程序(Scritping)的做法,以提高程序的可读性、维护性和方便性。
JSTL中提供的标签主要分为5类: 核心标签库,I18N标签库,SQL标签库,XML标签库,函数标签库
在页面通过URI直接引入标签库
示例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
根据不同的URI引入不同类型的标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
核心标签库:基本输入输出、流程控制、迭代操作和URL操作。
分为四大类:
表达式操作:out, set, remove
流程控制:if,choose,when, otherwise;
迭代操作:forEach
URL操作:import,url,redirect,param;
<c:set>赋值标签
<c:set>主要用来将变量存储至jsp范围中
<c:set var=“” value=“” scope=“” />
或者 <c:set var=“” scope=“” />
内容体
</c:set>
注意:var 和 scope这两个属性的值不能使用EL表达式来表示
<c:out>输出标签
<c:out>用来作为输出语句,其效果同<%=%>.主要属性有:
value | 用来输出的值,可以是EL表达式 |
default | 如果没有找到value的值,此属性为默认值 |
escapeXml | 如果value的值中含有标签,是否不解析标签 |
其语法格式为:
<c:out value="内容" escapeXml="布尔值"/>
<c:remove>移出标签
<c:remove>主要用来移除变量
<c:remove var=“” [scope=“”]/>
scope 的默认值为page.如果没有设定scope值,则从page/request/session/application范围依次查找var指定的对象,找到就删除,如果找不到就不做任何事情。
<c:if>标签
<c:if>的用途和我们一般在程序中用的if一样,主用来页面进行流程控制。
示例:
<c:if test=“testCondition” [var=“” scope=“”]/>
<c:if test=“${sessionScope.username==‘admin’}”>
Admin你好!
</c:if>
<c:choose>组合标签
<c:choose>表示选择,作为<c:when>与<c:otherwise>的父标签来使用。
<c:choose>相当于switch
<c:when>相当于case,用进行条件匹配
<c:otherwise>相当于default,条件无匹配时,进入otherwise块
<c:choose>
<c:when test=“${condition }”>
….
</c:when>
<c:when test=“${condition }”>
….
</c:when>
<c:otherwise>
….
</c:otherwise>
</c:choose>
<c:forEach>循环输出标签
迭代循环:
<c:forEach items=“” var=“ ” begin=“” end=“” step=“”>
……
</c:forEach>
参数说明:
items | 被迭代的集合对象 |
var | 用来存放现在指到的成员,String |
begin | 开始位置,int.可省略 |
end | 结束位置,int, end 值必须大于begin.可省略 |
step | 每次迭代的间隔数,int,必须大于0.可省略 |
<c:forEach>示例
<%
List list=new ArrayList();
list.add("tom");
list.add("jacky");
list.add("kelly");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="u">
${u}<br>
</c:forEach>