JSTL 表达式与 EL 语言
•发布于   •作者 Jencks  •547 次浏览  •来自 博客

转自:http://leon906998248.iteye.com/blog/1502569

一、什么是 EL 语言。

表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语音。

二、EL 语言的作用。

为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。

三、使用 EL 语言前的配置。

1、导入standard.jar。

2、在需要使用 EL 语音的页面加上<%@ page isELIgnored="false" %>。

 注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。

3、对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL的)

<jsp-property-group> 
    <description> For config the ICW sample application </description> 
    <display-name>JSPConfiguration </display-name>
    <url-pattern>/jsp/datareset.jsp </url-pattern>
    <el-ignored>true< / el-ignored> < / el-ignored>
    <page-encoding>UTF-8</page-encoding> 
    <scripting-invalid>true</scripting-invalid>
    <include-prelude>/jsp/prelude.jspf</include-prelude> 
    <include-coda>/jsp/coda.jspf</include-coda>
</jsp-property-group>

四、如何使用 EL 表达式。

1、EL 的内置对象。

首先我们要知道 EL 的内置对象有哪些----pageScope、requestScope、sessionScope、applicationScope,如果未指定scope,默认从 pageScope 到 applicationScope一次扩大范围查找属性名,也可以使用 xxxScope.属性名 直接指定在某个 scope 查找,如:

${ requestScope.tom } 

2、语法结构。

${expression}  

3、[ ]与.运算符。

EL 提供.和[]两种运算符来存取数据。如:

${student.name}
${studentList[0].name}

当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。如:

${ student.My-Name}   <!-- ${ student.My-Name} 写法不正确,应该改为下面这种 -->
${ student["My-Name"] }

如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。如:

${ sessionScope.student[property] }    <!-- 其中 property 是一个变量,动态取对象的属性,如"id", "name"等等 -->

4、使用 EL 取出内置对象的数据。

 

(1)、普通对象和对象属性。

服务器端:

request.setAttribute("student", student);

在浏览器上打印出服务器端绑定的数据:

${ student }  <!-- 相当于执行了 student.toString(); -->
${ student.name }  <!-- 相当于执行了 student.getName(); -->
${ student.teacher.name }  <!-- 相当于执行了 student.getTeacher().getName(); -->
...

(2)、数组中的数据。

服务器端:

String[] nameArray = new String[]{"Tom", "Lucy", "Lilei"};
request.setAttribute(“nameArray”,nameArray);

Student[] students = new Student[3];
students[0] = stu1;
students[1] = stu2;
students[2] = stu3;
request.setAttribute(“students”,students);

在浏览器上打印出服务器端绑定的数组数据:

${ nameArray[0] }   <!-- Tom -->
${ nameArray[1] }   <!-- Lucy -->
${ nameArray[2] }   <!-- Lilei -->

${ students[0].id }   <!-- 输出第一个学生的ID -->
${ students[1].name }   <!-- 输出第二个学生的name -->
${ students[2].teacher.name }   <!-- 输出第三个学生的老师的name -->

(3)、List中的数据。

 服务器端:

List<Student> studentList=new ArrayList<Student>();
studentList.add(stu1);
studentList.add(stu2);
studentList.add(stu3);
request.setAttribute(“studentList”,studentList);

在浏览器上打印出服务器端绑定的List数据:

${ studentList[0].id }   <!-- 输出第一个学生的ID -->
${ studentList[1].name }   <!-- 输出第二个学生的name -->
${ studentList[2].teacher.name }   <!-- 输出第三个学生的老师的name -->

(4)、Map中的数据。

服务器端:

Map<String, Student> studentMap = new HashMap<String, Student>();
studentMap.put("Tom", stu1);
studentMap.put("Lucy", stu2);
studentMap.put("Lilei", stu3);
request.setAttribute(“studentMap”,studentMap);

在浏览器上打印出服务器端绑定的Map数据:

${ studentMap.Tom.id }   <!-- 输出第一个学生的ID -->
${ studentMap.Lucy.name }   <!-- 输出第二个学生的name -->
${ studentMap.Lilei.teacher.name }   <!-- 输出第三个学生的老师的name -->

5、使用 EL 取出隐式对象中的数据。
JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用。可使用的隐式对象如下:

page
Context
JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。


此外,还提供几个隐式对象,允许对以下对象进行简易访问:

术语 定义

param将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 $(param . name) 相当于 request.getParameter (name)。
paramValues将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name) 相当于 request.getParamterValues(name)。
header将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
initParam将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。

除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面:

术语 定义

pageScope将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName} 访问对象的属性。
requestScope将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。
sessionScope将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如: 
${sessionScope. name}
applicationScope将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。

五、EL 操作符

JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:

术语 定义

算术型+、-(二元)、*、/、div、%、mod、-(一元)
逻辑型and、&&、or、||、!、not
关系型==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
empty。空操作符是前缀操作,可用于确定值是否为空。
条件型A ?B :C。根据 A 赋值的结果来赋值 B 或 C。

例如:

1+2=${1+2}
10/5=${10/5}
10 div 5=${10 div 5}
10%3=${10%3}
10 mod 3=${10 mod 3}
${empty  scope中的属性名}
${!empty  scope中的属性名}


六、什么是 JSTL 表达式。

 

JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。

七、JSTL 表达式的作用。

JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。JSTL标签库可分为5类:

 

  • 核心标签库
  • I18N格式化标签库
  • SQL标签库
  • XML标签库
  • 函数标签库

 

八、JSTL 表达式在页面的配置。

1、导入standard.jar和jstl.jar。

2、在JSP页面上引入 JSTL 的引用。如:

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

九、JSTL 的使用。

 

1、核心标签库

JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。如:

 

  • 表达式控制标签:out标签、set标签、remove标签、catch标签。
  • 流程控制标签:if标签、choose标签、when标签、otherwise标签。
  • 循环标签:forEach标签、forTokens标签。
  • URL操作标签:import标签、url标签、redirect标签。

 

下面,演示各个标签的使用。

1.1、表达式控制标签。

(1)、<c:out>标签:用来显示数据对象(字符串、表达式)的内容或结果。相当于 <% out.println(“字符串”)%> 或 <%=表达式%>。

语法如下:

 

  • 【语法1】:<c:out value=”要显示的数据对象” [escapeXml=”true|false”] [default=”默认值”]>
  • 【语法2】:<c:out value=”要显示的数据对象” [escapeXml=”true|false”]>默认值</c:out>

 

其中,

value:指定要输出的变量或表达式。

escapeXml:设定是否转换特殊字符(如&lt、&gt等一些转义字符),在默认值为true的情况下直接在输出&lt的,如果改为false将会进行转义输出“<”等。

default:为默认输出结果。如果使用表达式得到的结果为null(注意与空区别),将会输出默认结果。

例如:

<%@ page pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
	<head>
		<title>out标签的使用</title>
	</head>
	<body>
		<ul>
			<li>1)<c:out value="普通一行字符串"></c:out></li>
			<li>2)<c:out value="&lt未使用字符转义&gt" /></li>
			<li>3)<c:out value="&lt未使用字符转义&gt" escapeXml="false"></c:out></li>
			<li>4)<c:out value="${null}">使用了默认值</c:out></li>
            <li>5)<c:out value="${null}"></c:out></li>
    	</ul>
    </body>
</html>

输出:

普通一行字符串
<未使用字符转义>
<未使用字符转义>
使用了默认值

(2)、<c:set>标签:主要用于将变量存取于JSP范围中或JavaBean属性中。  

  • 【语法1】:
<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]>

,把一个值放在指定(page、session等)的map中。

<c:set value=”值3” target=”JavaBean对象” property=”属性名”/>


0 回复
作者
积分: 378
“ 成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不再需要对别人察言观色的从容,一种终于停止向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种能够看得很远却又并不陡峭的高度。 ”
回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3