EL表达式
EL(Expression Language):表达式语言,提供了在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"]}
使用以上语法格式前提是:对象中必须包含有getCooks()和getNam()方法。
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
EL中与jsp对应的隐含变量
EL运算符
算术运算符————————————————————————————
JSTL标签库
JSTL全称JavaServer Pages Standard Tag Library,即JSP标准标签库
JSTL是一个标准的已经制定好的标签库,可以用到各种领域,如:基本输入输出、流程控制、循环、XML文件解析、数据库查询及国际化应用等。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入java程序(Scritping)的做法,以提高程序的可读性、维护性和方便性。
JSTL标签
如何将JSTL的jar包导入到Eclipse中?
将jar包复制到web工程的WEB-INF目录下的lib文件夹中,使用时在jsp页面中通过以下方式声明即可。
在页面通过URI直接引入标签库示例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
根据不同的URI引入不同类型的标签库
JSTL核心标签库
核心标签库:基本输入输出、流程控制、迭代操作和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指定的对象,找到就删除,如果找不到就不做任何事情。
流程控制标签
流程控制类的标签分为2个:
<c:if>条件判断标签
和
<c:choose>组合标签
<c:when>
<c:otherwise>
<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>/<c: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.可省略