JSTL和EL


为什么需要EL

 

JSP中使用Java脚本的局限

JSP页面中嵌入大量的Java代码

访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换

 

例如:

<%

    Employee employee = (Employee) request.getAttribute("employee");

    Computer comp = employee.getComputer();

    String manufacturer = comp.getManufacturer();

%>

 

EL表达式使JSP的开发变得更加简单

例如:

${requestScope.employee.computer.manufacturer}

 

 

EL表达式简介

 

什么是EL表达式

Expression Language(表达式语言),它是一种借鉴了JavaScriptXPath的表达式语言

 

EL的功能

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

 

EL的特点

自动转换类型

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

使用简单

 

EL表达式语法

 

语法:

${ EL expression }

通过变量名取值

获取对象的属性值

获取集合元素

执行表达式

 

1、点操作符

EL表达式通常由两部分组成:对象和属性,就像在Java代码中一样,在EL表达式中也可以用点操作符“.”来访问对象的某个属性

2[ ]操作符

与点操作符类似,[ ]”操作符也可以访问对象的某个属性

当属性名中包含了特殊字符如.”或“-”等的情况下,就不能使用点操作符,这时只能使用“[ ]”操作符

访问数据,如果有一个对象名为array的数组,那么可以根据索引值来访问其中的元素

[ ]”操作符中可以使用变量实现动态访问

 

例如:

获取集合元素-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"] }

 

获取对象的属性值

例如:

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

点操作符

${user.name}

[ ]操作符

${user["name"]}

 

指定作用域

属性范围

EL中的名称

page

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

request

requestScope

session

sessionScope

application

applicationScope

注:按照page request session application的作用域顺序依次查找,找到即返回,最终找不到返回null

 

执行表达式

关系操作符

关系操作符

说明

示例

结果

==(eq)

等于

${23==5}${23 eq 5}

FALSE

${"a" =="a"}${"a" eq "a"}

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

 

逻辑操作符

逻辑操作符

说明

示例

结果

&&(and)

逻辑与

如果AtrueBfalse,则${ A && B } (${ A and B } )

FALSE

||(or)

逻辑或

如果AtrueBfalse,则${ A || B} ( ${ A or B } )

TRUE

! (not)

逻辑非

如果Atrue,则${ ! A } ( ${ not A } )

FALSE

 

 

empty操作符

 

若变量 anull,或长度为零的String,或size为零的集合

${ empty a }返回的结果为true

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

 

 

EL隐式对象

 

作用域访问对象

pageScoperequestScopesessionScopeapplicationScope

参数访问对象

paramparamValues

JSP隐式对象

pageContext

 

EL隐式对象介绍

 

对象名称

  

pageScope

page作用域相关联的Map对象

requestScope

request作用域相关联的Map对象

sessionScope

session作用域相关联的Map对象

applicationScope

application作用域相关联的Map对象

param

按照请求参数名称返回单一值的Map对象

paramValues

按照请求参数名称返回String数组的Map对象

pageContext

提供对页面信息和JSP内置对象的访问

 

 

JSTL

 

EL表达式封装了数据访问的功能,而JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能,二者结合使用才能完整实现动态页面的开发需求

 

什么是JSTL

JSP标准标签库(JSP Standard Tag Library

JSTL的优点

1、提供一组标准标签

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

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

 

使用JSTL的步骤

引入JSTLjar文件和标签库描述符文件

JSP页面添加taglib指令

 

使用JSTL标签

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

 

JSTL标准标签库中的常用标签

 

通用标签

setoutremove

条件标签

ifchoose

迭代标签

forEach

 

通用标签

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

语法:

value值设置到对象的属性中

语法:

例如:

// 在Servlet或JSP中设置JavaBean

User  user = new  User();

request.setAttribute("user",  user);

// 在JSP中修改JavaBean的属性值


 

 

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

不指定默认值

语法:

指定默认值

语法:

例如:

// 在Servlet或JSP中设置JavaBean

User  user = new  User();

request.setAttribute("user",  user);

// 在JSP中输出JavaBean的属性值


 

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

转义特殊字符

例如:

${ "百度" }


 

 

remove:删除指定范围内的变量

语法:

例如:



设置变量之前的值是:msg=
//使用set标签设置属性 设置新值以后:msg=
//使用out输出属性显示 //使用remove移除属性 移除变量msg以后:msg=

 

 

条件标签

 

if:实现Java语言中if语句的功能

语法:

 test="codition"(判断条件表达式返回true/false

 var="variable"(该变量用于保存返回的true/false

scope="scope"(指定var变量的作用域)

 

例如:





…登录表单





…已经登录


 

 

choose:实现if - else if - else语句的功能

 

语法:

内容1

 

内容2

 

……

内容n

 

迭代标签

 

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

 

 

…循环体代码…

 

 

items="collection"items指定要遍历的集合对象)

var="varName"var指定当前成员的引用)

begin="start"begin指定从集合的第几位开始)

end="end"end指定迭代到集合的第几位结束)

step="stepSize" step指定循环的步长)

varStatus="status"varStatus属性用于存放var引用的成员的相关信息,如索引等)

 

 

例如:

// 在Servlet或JSP中准备集合数据

List products = GoodsDao.getAllProducts();

request.setAttribute("products", products);

// 在JSP中展示数据





    

    

            style="background-color:rgb(219,241,212);">

        ${product.name }

        ${product.area }

        ${product.price }

    


 

 

通过迭代标签变量Map

例如:

// 在Servlet或JSP中准备数据

Map map = new HashMap();

map.put("tom",  "美国");

map.put("lily",  "英国");

map.put("jack", "中国");

request.setAttribute("map",  map);

// 在JSP中展示数据



     ${ entry.key }

     ${ entry.value }


 

forEach:指定迭代的次数

语法:

 

…循环体代码…

例如:






 

 

你可能感兴趣的:(JSTL和EL)