当前位置:文档之家› EL表达式与JSTL

EL表达式与JSTL

EL表达式与JSTL
EL表达式与JSTL

EL和JSTL

主要内容

?EL表达式

?JSTL标签库

1.EL表达式

EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。在JSP页面中使用EL表达式,可以简化对变量和对象的访问。

EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。

EL表达式对运算符支持

使用EL表达式进行算术运算,在EL表达式中支持+、-、*、/、%运算,示例如下:

代码演示:EL表达式算术运算

<%@ page language="java" pageEncoding="UTF-8"%>

EL表达式算术运算

12 + 15 = ${12+15}

12 * 15 = ${12*15}

12 - 15 = ${12-15}

12 / 15 = ${12/15}

12 % 15 = ${12%15}

图1 EL表达式算术运算结果

在EL表达式中还可以支持关系运算符操作,示例如下:

代码演示:EL表达式关系运算符

12==15 ${12==15}

12<15 ${12<15}

12>15 ${12>15}

12<=15 ${12<=15}

12>=15 ${12>=15}

12!=15 ${12!=15}

EL表达式除了支持普通的关系运算符外,还可以使用字符来表示关系运算符,下面的写法和上面使用普通关系运算符表示的顺序一一对应:

代码演示:EL表达式关系运算符

12==15 ${12 eq 15}

12<15 ${12 lt 15}

12>15 ${12 gt 15}

12<=15 ${12 le 15}

12>=15 ${12 ge 15}

12!=15 ${12 ne 15}

图2 EL表达式关系运算符结果

EL表达式中同样支持逻辑运算:

代码演示:EL表达式逻辑运算

${12 < 15 && 12 < 15 }

${12 < 15 and 12 < 15 }

${12 < 15 || 12 > 15 }

${12 < 15 or 12 >15 }

${!(12 < 15) }

${not (12 < 15) }

从上面的代码中可以看出EL表达式中不仅支持&&、||、!方式的逻辑运算符,同样也支持and、or、not方式的逻辑运算符。在EL表达式中也可以小括号来提升运算符的优先级。

EL表达式中还可以使用empty运算符检测一个值是否为null或者为空。

代码演示:EL表达式empty运算符

<%

List list = new ArrayList();

list.add("tom");

pageContext.setAttribute("str", null);

pageContext.setAttribute("list", list);

%>

${empty str } ①

${empty list} ②

代码解析:

①判断内容是否为null

②判断集合list中是否有元素

图3 EL表达式empty运算符

EL表达式中还支持三元表达式方式的条件选择运算,例如:

代码演示:EL表达式条件选择

${12 < 15 ? 'yes':'no' } ①

代码解析:

①注意在EL表达式中的字符串需要使用单引号引起来。

EL访问对象

EL表达式的方便性不仅仅体现在对这些算术或关系运算的支持,它还可以很方便的访问对象。例如在上面讲empty运算符时,使用EL表达式可以访问pageContext空间中的对象。EL表达式不仅可以访问pageContext中的对象,还可以访问request、session、application 中的对象。

代码演示:EL表达式访问对象

<%

pageContext.setAttribute("name","tom");

request.setAttribute("age","22");

session.setAttribute("address","中国");

application.setAttribute("score","75.5");

%>

${name}

${age}

${address}

${score}

图4 EL表达式访问对象

从上面的例子中,可以看出访问对象只需要在EL表达式中写对象的名称即可。EL表达式默认会从pageContext、reqest、session、application中并按照此顺序寻找名称匹配的对象,如果找不到,则不显示任何内容。还可以指定从哪个空间中获取对象。

代码演示:EL表达式从指定空间内访问对象

<%

pageContext.setAttribute("name","tom");

request.setAttribute("age","22");

session.setAttribute("address","中国");

application.setAttribute("score","75.5");

%>

${https://www.doczj.com/doc/2d9725749.html,}

${requestScope.age}

${sessionScope.address}

${applicationScope.score}

代码解析:

①从pageContext中获取对象,pageScope代表pageContext空间。

②从request中获取对象,requestScope代表request空间。

③从session中获取对象,sessionScope代表session空间。

④从application中获取对象,applicationScope代表application空间。

如果空间内存放时一个自定义类的对象,会出现什么样的结果呢?

代码演示:User类

package com.zhaolongedu.vo;

public class User {

private String name;

private String address;

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/2d9725749.html, = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public String toString() {

return name + "来自" + address;

}

}

代码演示:使用EL表达式访问User类对象

<%

User user = new User();

user.setAddress("巴西");

user.setName("小黑");

pageContext.setAttribute("user",user);

%>

${user}

图5 EL表达式访问自定义类对象

通过上面的例子可以看出如果直接输出自定义类的对象,EL表达式将会访问类的toString方法并将返回值进行输出。当然我们还可以很方便的使用EL表达式获得对象的属性值:

代码演示:EL表达式获取对象属性值

<%

User user = new User();

user.setAddress("巴西");

user.setName("小黑");

pageContext.setAttribute("user",user);

%>

${https://www.doczj.com/doc/2d9725749.html,}

${user.address }

代码解析:

①通过点“.”运算符来获取对象user中的name属性的值。再次需要注意要访问的属性

名不一定是和对象的属性名相同,而是要和get方法的方法名去掉“get”后的名字相同。

图6 使用EL表达式访问对象属性

在访问属性时不仅可以使用点“.”运算符,还可以使用“[]”将属性包含其中。

代码演示:使用EL表达式访问对象属性

<%

User user = new User();

user.setAddress("巴西");

user.setName("小黑");

pageContext.setAttribute("user",user);

%>

${user["name"]}

${user["address"] }

注意在使用“[]”包含属性时需要将属性使用双引号引起来。

图7 使用EL表达式访问对象属性运行结果

2.JSTL核心标签库

JSTL全称为(JavaServer Page Standard Tag Libray 即:Java标准标签库),是由SUN公司提供的简化JSP页面设计的标签。JSTL是由Core、I18N、SQL、XML、Functions五个核心标签库组成,其中最重要的是Core标签库和I18N标签库中的格式化标签库。JSTL和EL表达式通常会一起使用。

在使用JSTL之前需要先下载包含JSTL的jar包,JSTL的Jar包油jstl.jar和standard.jar 组成,下载的网址为https://www.doczj.com/doc/2d9725749.html,/site/downloads/downloads_taglibs-standard.cgi,将下载好的压缩包内jstl.jar和standard.jar放入的Web工程中的lib目录下,并在使用JSTL 的JSP页面上使用taglib指令导入所需要的标签库即可。

Core标签库中包含了基本标签、条件标签、迭代标签。在使用Core标签时需要在JSP 页面中使用taglib指令导入Core标签库:

<%@ taglib prefix="c" uri="https://www.doczj.com/doc/2d9725749.html,/jsp/jstl/core" %>

Core标签库中的基本标签包括、和标签。

标签

标签用于在某空间中(pageContext、request、session、application)声明变量并赋值,它的属性如下表所示。

表1 标签属性

代码演示:Core 标签库标签

22

Tom

代码解析:

① 在session 空间中设置变量name 的值为“小黑”。

② 在page 空间中设置变量age 的值为“22”,使用value 属性可以为var 变量赋值,同

样也可以写在标签体中为var 变量进行赋值。

③ 获得user 对象并给user 对象的name 属性赋值为“小美”,如果target 获得的对象为

null ,JSTL 会抛出异常。如果target 的对象为JavaBean ,那么property 中的值为JavaBean 的属性,value 为property 属性的值。

④ 获得map 对象并给map 的对象赋值。当

target 的对象为java.util.Map 的对象时,

property 作为Map

中的key ,varlue 作为Map 的value 。可以使用value 属性为property 赋值,也可以在标签体中为property 属性赋值。

? 标签

标签用于将空间内的变量进行输出。

表2 标签属性

代码演示:Core标签库标签

22




还是没有值



代码解析:

①输出变量名为name的值。

②输出变量名为address的值,因为变量address未声明,所以获得的值为null。如果

value为null,则会显示default中的值,或显示标签体中的值。

③输出变量名为code的值,变量code中包含有HTML的值。在中escapeXml

属性默认为true,所以HTML代码会被原样输出不会被执行。

④将escapeXml值设置为false,code变量中的HTML值会被浏览器解析,运行结果如

下:

图8 JSTL标签

?标签

标签用于将变量从空间内移除。

表3 标签属性

代码演示:Core标签库标签

代码解析:

①从session空间中删除name变量。

下面来学习条件标签,条件标签包括

?标签

标签的作用和Java语言中的if语句功能是相同的。

表4 标签属性

代码演示:Core标签库标签

12 大于10 test的结果为${result }

12 小于10

代码解析:

①如果test条件成立,将条件返回值存储到page空间内的result变量中。注意var属

性和scope属性不是必须的,但是如果使用scope属性,则必须使用var属性。

标签

一起实现Java语言中的if/else功能。标签是标签的父标签,在标签中只能出现这两个子标签。

代码演示:Core标签库标签

jerry

tom

other name

代码解析:

①如果标签test条件返回值true,该标签体则会执行。

②如果标签中的标签都不成立,则执行标签体。 标签

标签为Core标签库中的迭代标签,主要属性有:

表4 标签属性

代码演示:将数组和集合存入到request空间内

<%@ page language="java" import=" java.util.*" pageEncoding="UTF-8"%>

<%

Map map = new HashMap();

map.put("key1","value1");

map.put("key2","value2");

map.put("key3","value3");

List list = new ArrayList();

list.add("list1");

list.add("list2");

list.add("list3");

String[] strs = {"str1","str2","str3"};

request.setAttribute("list",list);

request.setAttribute("strs",strs);

request.setAttribute("map",map);

request.getRequestDispatcher("jstl1.jsp").forward(request,response);

%>

代码演示:使用标签迭代数组和集合

对数组的迭代:

${status.count}

${str}

对List集合的迭代:

${listItem}

对Map集合的迭代:

${mapItem.key} : ${mapItem.value}

代码解析:

①迭代数组,将数组中每个元素存储到str变量中并在迭代体中输出。在varStatus属

性中声明迭代状态对象status,该对象有index、count、frist、last四个属性,分别代表当前元素的索引、当前元素是第几个元素、当前元素是否为第一个元素、当前元素是否为最后一个元素。

②对List集合的迭代,begin属性指定了迭代的开始索引,end属性指定迭代的结束索

引。

③迭代map集合,调用map集合中元素的key和value属性可以获得该元素的key值

及value值。

图9 使用forEach标签迭代数组和集合

3.JSTL格式化标签库

在使用JSTL格式化标签库时,需要在使用的JSP页面中使用taglib指令导入格式化标签:<%@ taglib prefix="fmt" uri="https://www.doczj.com/doc/2d9725749.html,/jsp/jstl/fmt" %>

在JSTL格式化标签中最重要的是标签和标签,分别代表对数字和日期的格式化输出。

表5 标签常用属性

代码演示:格式化标签

格式化货币:

currencySymbol="$" maxFractionDigits="3"/>

格式化数字:

minFractionDigits="3"/>

格式化百分比:

0.98

代码解析:

①将value中的值格式为美元货币格式,小数部分最大位数为3位。

②将value中的值格式化为数字格式,小数部分最小位数为3位,不足3位使用0补

齐。

③将标签体内的值格式化为百分比格式。

图10 标签格式化运行结果

表6 标签属性

代码演示:格式化标签


dateStyle="full"/>

图11 使用格式化日期

4.总结

EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。

在JSP页面中使用EL表达式,可以简化对变量和对象的访问。

EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。

EL表达式不仅可以访问pageContext中的对象,还可以访问request、session、application 中的对象。

JSTL格式化标签库主要有日期格式化和数字格式化。

相关主题
文本预览
相关文档 最新文档