EL表达式和JSTL表达式

本文详细介绍了EL(Expression Language)表达式语言的取值方式、执行表达式、隐式对象及其开启关闭方法,强调了empty操作符的用法。同时,探讨了JSTL(JSP Standard Tag Library)的常用标签,如set、out、remove、if条件标签及迭代标签的使用,提供了实际应用示例。
摘要由CSDN通过智能技术生成

EL:Expression Language(表达式语言)

EL的功能:

替代JSP页面中数据访问时的复杂编码
<!-- 
EL功能体现:替换小脚本
//在JSP中使用Java脚本的局限
//在JSP页面中嵌入大量的Java代码
//访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换
-->
<%  
    Employee employee = (Employee) request.getAttribute("employee");
    Computer comp = employee.getComputer();
    String manufacturer = comp.getManufacturer();
%>
<!-- EL只需要一句,就可以替代java脚本 -->
${requestScope.employee.computer.manufacturer}

EL的特点:

自动转换类型 EL得到某个数据时可以自动转换类型 

简单易用 

EL的语法:

${ EL expression }

EL的4种取值范围:

pageScope,requestScope,sessionScope,applicationScope
属性范围EL中的名称
pagepageScope
requestrequestScope
sessionsessionScope
applicationapplicationScope

注意:

1、${pageScope.username}表示在page作用域查找变量username,找不到返回null

2、如果在表达式中不标明作用域,则按照page → request → session → application的作用域顺序依次查找,找到即返回,最终找不到返回null

EL取值方式:

1、通过变量名取值:

${变量名} 推荐写为:${作用域.变量名}

2、获取对象的属性值:

<%=((User)request.getAttribute("user")).getName() %>

①、点操作符:${user.name}

②、[]操作符:${user["name"]} //注意中括号里的双引号,如果不写则表示变量名

注意:JavaBean中需要有相应getter方法才能用EL表达式这样取值

3、获取集合元素:

List
// 在Servlet或JSP中保存数据
List names = new ArrayList();
names.add(0, "LiYang");
names.add(1,"WangHua");
request.setAttribute("names",names);

// 在JSP中访问数据
姓名:${ names[0] }<br/>
姓名:${ names[1] }<br/>
//注意:使用[ ]指定元素下标
Map
// 在Servlet或JSP中保存数据
Map names = new HashMap();
names.put("one", "LiYang");
names.put("two", "WangHua");
request.setAttribute("names", names);

// 在JSP中访问数据
姓名:${ names.one }<br/>
姓名:${ names["two"] }<br/>

注意:

1、Map建议使用String做key,如果使用纯数值格式则只能使用长整形
    Map names = new HashMap();
    names.put(1L, "LiYang");
    names.put("two", "WangHua");
    request.setAttribute("names", names);
2、Map中key的类型:
//对于String类型的key
${names["two"]}和${names.two}

//对于Long类型的key仅可使用
${names[1]}

执行表达式

关系操作符、逻辑操作符、empty操作符
关系操作符说明示例结果
==或者eq等于${23==5}${23 eq 5}
${"a" =="a"}${"a" eq "a"}
false
true
!=或者ne不等于${23!=5}${23 ne 5}true
<或者lt小于${23<5}${23 lt 5}false
>或者gt大于${23>5}${23 gt 5}true
<=或者le小于等于${23<=5}${23 le 5}false
>=或者ge大于等于${23>=5}${23 ge 5}ture
empty操作符

①、若变量 anull,或长度为零的String,或size为零集合,则${ empty a }返回的结果为true

②、${ not empty a }${ ! empty a }返回的结果为false

逻辑操作符说明示例
&&或者and逻辑与如果A为true,B为false,则${ A && B }或者${ A and B }
|或者or逻辑或如果A为true,B为false,则${ A || B}或者${ A or B }
!或者not逻辑非如果A为true,则${ ! A }或者${ not A }

EL隐式对象

1、作用域访问对象
对象名称说 明
pageScope与page作用域相关联的Map对象
requestScope与request作用域相关联的Map对象
sessionScope与session作用域相关联的Map对象
applicationScope与application作用域相关联的Map对象
2、参数访问对象
对象名称说 明
param按照请求参数名称返回单一值的Map对象
paramValues按照请求参数名称返回String数组的Map对象
3、JSP隐式对象
pageContext 提供对页面信息和JSP内置对象的访问

开启和关闭EL表达式

1、开启方法

servlet2.4之后默认方法为false,即可以不写或写成<%@ page isELIgnored="false" %>

2、关闭方法

<%@ page isELIgnored="true" %>

3、批量禁用EL的方法

在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,web.xml中进行如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>true</el-ignored>
        </jsp-property-group>
    </jsp-config>
</web-app>

EL总结:

EL表达式:

1、基本格式:${}

2、4种取值范围:pageScope,requestScope,sessionScope,applicationScope

3、基本运算:.[].用于取属性、[]用于取Array,List,Map,Set

${requestScope.map['apple']}

${requestScope.list[1]}

4.花括号内允许的运算:算术运算,关系运算,逻辑运算,empty/not empty空判断

${1+1}

${user.age<18}

${(user.age>18)&&(user.sex=='男')}

${empty user}判断user对象是否为空

5、EL的11个隐含对象:

隐含对象名称描述
pageContext对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
pageScope代表page域中用于保存属性的Map对象
requestScope代表request域中用于保存属性的Map对象
sessionScope代表session域中用于保存属性的Map对象
applicationScope代表application域中用于保存属性的Map对象
param表示一个保存了所有请求参数的Map对象
paramValues表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回string[]数组
header表示一个保存了所有http请求头字段的Map对象
headerValues返回string[]数组。如果头里面有-,则需要用到headerValues
例:Accept-Encoding,则要headerValues[“Accept-Encoding”]
cookie表示一个保存了所有cookie的Map对象
initParam表示一个保存了所有web应用初始化参数的map对象

JSTL:JSP标准标签库(JSP Standard Tag Library)

1、提供一组标准标签

2、可用于编写各种动态 功能

EL表达式封装了数据访问的功能

JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能

JSTL通常会与EL表达式合作实现JSP页面的编码

JSTL的环境搭建

1、引入JSTL的jar文件和标签库描述符文件

如果使用MyEclipse,创建web project 时选择 Java EE 5.0或 Java EE 6.0单选按钮,则可集成了JSTL

2、在JSP页面添加taglib指令

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

3、使用JSTL标签

通用标签:

set:设置指定范围内的变量值

1、将value值存储到范围为scope的变量variable中

<c:set  var="variable"  value="value"  scope="scope" />

2、将value值设置到对象的属性中

<c:set  target="target"  property="property"  value="value" />

// 在Servlet或JSP中设置JavaBean
User user = new User(); 
request.setAttribute("user", user);

// 在JSP中修改JavaBean的属性值
<c:set target="${user}" property="name" value="defaultName" />
out:计算表达式并将结果输出显示

1、不指定默认值

语法:<c:out  value="value" />

2、指定默认值

语法:<c:out  value="value"  default="default" />

// 在Servlet或JSP中设置JavaBean
User  user = new  User(); 
request.setAttribute("user",  user);

// 在JSP中输出JavaBean的属性值
<c:out  value="${user.name}"  default="No UserName" />

3、转义特殊字符

<p>${"<a href='http://www.baidu.com'>百度</a>"}</p>

<p><c:out escapeXml="false" value="<a href='http://www.baidu.com'>百度</a>" /></p>

<c:out  value="<a href='http://www.baidu.com'>百度</a>" />

//前两个显示百度链接,而第三个则为一串字符串"<a href='http://www.baidu.com'>百度</a>"

注意:

1、<c:out>标签,类似于JSP中的<%=%><c:out>标签可以指定默认值,<%=%>则不能,最好添加默认值

remove:删除指定作用域内的变量
语法:<c:remove  var="variable"  scope="scope" />

例子:

<!-- 设置之前应该是空值 -->
设置变量之前的值是:msg=<c:out  value="${msg}"  default="null" /><br/>

<!-- 给变量msg设值 -->
<c:set  var="msg"  value="Hello  World!"  scope="page"></c:set>

<!-- 此时msg的值应该是上面设置的“Hello World!” -->
设置新值以后:msg=<c:out  value="${msg}"></c:out><br/>

<!-- 把 msg变量从page范围内移除-->
<c:remove  var="msg"  scope="page" />

<!-- 此时msg的值应该显示null -->
移除变量msg以后:msg=<c:out  value="${msg}"  default="null"></c:out>
if条件标签:
<c:if   test="codition"   var="variable"  scope="scope" >
    …
</c:if>

test属性:判断条件表达式返回true/false 
var属性:该变量用于保存返回的true/false   
scop属性:指定var变量的作用域   

表单1:使用if标签判断是否登录

<c:set var="isLogin" value="${empty sessionScope.user}"/>

<c:if test="${isLogin}">
…登录表单
</c:if>

<c:if test="${! isLogin}">
…已经登录
</c:if>
when 、otherwise与choose的使用规则
//choose:实现if - else if - else语句的功能
<c:choose>
    <c:when test="condition1">
        内容1
    </c:when>
    <c:when test="condition2">
        内容2
    </c:when>
    ……
    <c:otherwise>
        内容n
    </c:otherwise>
</c:choose >
迭代标签:

1、forEach:实现对集合对象的遍历

<c:forEach items="collection" var="varName"  begin="start" end="end" step="stepSize"    varStatus="status">
        …循环体代码…
</c:forEach>

items属性:指定要遍历的集合对象
var属性:指定当前成员的引用
begin属性:指定从集合的第几位开始
end属性:指定迭代到集合的第几位结束
step属性:指定循环的步长
varStatus属性:用于存放var引用的成员的相关信息,如索引等

2、forEach:指定迭代的次数

<c:forEach  begin="start"  end="end"  step= "stepSize">
    …循环体代码…
</c:forEach>

3、通过迭代标签显示商品列表,并且隔行变色

// 在Servlet或JSP中准备集合数据
List products = GoodsDao.getAllProducts();
request.setAttribute("products", products);

// 在JSP中展示数据
<!-- 循环输出商品信息 -->
<c:forEach  items="${requestScope.products}"  var="product" 
        varStatus="status">
    <!-- 如果是偶数行,为该行换背景颜色 -->
    <tr <c:if test="${status.index % 2 == 1 }">
            style="background-color:rgb(219,241,212);"</c:if>>
        <td>${product.name }</td>
        <td>${product.area }</td>
        <td>${product.price }</td>
    </tr>
</c:forEach>
<!-- 注意对比varStatus的index和count属性的区别 -->

4、通过迭代标签遍历Map

// 在Servlet或JSP中准备数据
Map<String, String> map = new HashMap<String, String>();
map.put("tom",  "美国");
map.put("lily",  "英国");
map.put("jack", "中国");
request.setAttribute("map",  map);

// 在JSP中展示数据
<c:forEach  items="${requestScope.map}" var="entry">
     ${ entry.key }
     ${ entry.value }<p>
</c:forEach>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值