EL表达式和JSTL表达式

EL:Expression Language(表达式语言)

EL的功能:

替代JSP页面中数据访问时的复杂编码

<%  
    Employee employee = (Employee) request.getAttribute("employee");
    Computer comp = employee.getComputer();
    String manufacturer = comp.getManufacturer();
%>

${requestScope.employee.computer.manufacturer}

EL的特点:

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

简单易用 

EL的语法:

${ EL expression }

EL的4种取值范围:

pageScope,requestScope,sessionScope,applicationScope
属性范围 EL中的名称
page pageScope
request requestScope
session sessionScope
application applicationScope

注意:

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] }
姓名:${ names[1] }
//注意:使用[ ]指定元素下标

Map

// 在Servlet或JSP中保存数据
Map names = new HashMap();
names.put("one", "LiYang");
names.put("two", "WangHua");
request.setAttribute("names", names);

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

注意:

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中进行如下配置:

<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>*.jspurl-pattern>
            <el-ignored>trueel-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中

set  var="variable"  value="value"  scope="scope" />

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

set  target="target"  property="property"  value="value" />

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

// 在JSP中修改JavaBean的属性值
set target="${user}" property="name" value="defaultName" />

out:计算表达式并将结果输出显示

1、不指定默认值

语法:out  value="value" />

2、指定默认值

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

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

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

3、转义特殊字符

${"百度"}

"false" value="百度" />

"百度" /> //前两个显示百度链接,而第三个则为一串字符串"百度"

注意:

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

remove:删除指定作用域内的变量

语法:var="variable"  scope="scope" />

例子:


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


<c:set  var="msg"  value="Hello  World!"  scope="page">c:set>


设置新值以后:msg=<c:out  value="${msg}">c:out><br/>


<c:remove  var="msg"  scope="page" />


移除变量msg以后:msg=<c:out  value="${msg}"  default="null">c:out>

if条件标签:

if   test="codition"   var="variable"  scope="scope" >
    …
if>

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

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

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

if test="${isLogin}">
…登录表单
if>

if test="${! isLogin}">
…已经登录
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:实现对集合对象的遍历

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

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

2、forEach:指定迭代的次数

forEach  begin="start"  end="end"  step= "stepSize">
    …循环体代码…
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>

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>

你可能感兴趣的:(java,jstl)