EL表达式与JSTL表达式

2023-05-04 19:12:11 浏览数 (1)

EL与JSTL

EL表达式

概述

在jsp开发中,为了获取Servlet域对象中存储的数据,经常要写很多java代码,这样的做法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。它是Expression Language的缩写。

语法

{EL 表达式} 例如:{username}

注意

EL严格区分大小写,初学者严格按规范书写,有利于养成好的编码习惯

EL操作符
操作符“.”

获取对象的属性,例如:${news.title}

操作符“[]”

获取对象的属性,例如:{news["title"]} 获取集合中的对象,例如:

EL运算符

为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法

关系运算符

范例

结果

== 或 eq

${5 == 5}**或${5** eq 5}

true

!= 或 ne

${5 != 5}**或${5 ne 5}**

false

< 或 lt

${3 < 5}**或${3** lt 5}

true

> 或 gt

${3 > 5}**或{3** gt 5}

false

<= 或 le

${3 <= 5}**或${3 le 5}**

true

>= 或 ge

${3 >= 5}**或${3** ge 5}

false

运算符

说明

( )

改变执行的优先级,例如${3(4 5)}

,-,*,/,%

算术运算符,例如${3 2}

==,!=,>,>=,<,<=

关系运算符,例如${a==b}或${a eq b}

&&,||,!

逻辑运算符,例如${true&&false}

?:

条件运算符,例如${a>b?1:2}

empty

用于检测变量名是否为空或者没定义或者为空字符串或者没元素的数组或者集合,是否等于NULL,例如${empty name}

EL内置对象
  1. pageScope:从page范围域属性空间中查找指定的key
  2. requestScope:从request范围域属性空间中查找指定的key
  3. sessionScope:从session范围域属性空间中查找指定的key
  4. applicationScope:从application范围域属性空间中查找指定的key
  5. pageContext:该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象注意:这些对象在EL里不是内置对象,这些对象只能通过pageContext获取
  6. param=request.getParameter()
  7. paramValues=request.getParameterValues()

目的 简单的数据处理和取值,最常用的就是取值

EL获取值
取得JavaBean对象的属性值

<jsp:usebean id="news" class="xxxxxxx">

${news.title}

取得数组、List、Map类型对象的元素

${list[0]}

使用各类运算符对原始数据进行简单处理

${totalRecordCount/pageSize}

屏蔽一些常见的异常

${username}

能实现简单的自动类型转换

${news}相当于(News)request.getAttribute("news")

注意:脚本中声明的对象是不能直接获取的,要放在相对应的域中才能得到
EL访问作用域

作用域

Java代码取值

EL取值

请求作用域

request.getAttribute("news");

${ requestScope.news }

会话作用域

session.getAttribute("username");

${ sessionScope.username }

程序作用域

application.getAttribute("count");

${ applicationScope.count }

页面作用域

pageContext.getAttribute("userNum");

${ pageScope.userNum }

直接写${news}就是从小到大去找

JSTL

简介

JSP标准标签库 实现JSP页面中的逻辑控制

使用步骤

下载jstl.jar和standard.jar包 将这两个包复制到WEB-INFlib目录 在JSP页面中添加指令 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

分类

标签库名称

资源标示符(uri)

前缀(prefix)

核心标签库

http://java.sun.com/jsp/jstl/core

c

国际化/格式化标签库

http://java.sun.com/jsp/jstl/fmt

fmt

XML标签库

http://java.sun.com/jsp/jstl/xml

x

数据库标签库

http://java.sun.com/jsp/jstl/sql

sql

函数标签库

http://java.sun.com/jsp/jstl/functions

fn

c:out标签
代码语言:javascript复制
<c:out value="value" default="default" escapeXml="true|false" />
需要输出显示的表达式
默认输出显示的值
是否对输出的内容进行转义
​
c:set 标签
设置变量
代码语言:javascript复制
<c:set  var="name"  value= "value" scope="scope" />
表示变量名称
表示变量的值
存在的作用域
设置对象属性
代码语言:javascript复制
<c:set value= "value" target="target" property="propertyName" />
表示属性的值
表示对象
表示对象的属性名称
c:forEach标签(常用)
代码语言:javascript复制
<c:forEach
    items="xxx"
    begin="xx"
    end="xx"
    step="xx"
    var="xx"
    varStatus="xx">
属性     描述                              是否必要           默认值
items   要被循环的信息                         否               无
begin   开始的元素(0=第一个元素,1=第二个元素)   否                0
end     最后一个元素(0=第一个元素,1=第二个元素) 否           Last element
step    每一次迭代的步长                       否                1
var     代表当前条目的变量名称                  否               无
varStatus   代表循环状态的变量名称              否               无
${varStatus.index} 此项的索引,从0开始 
${varStatus.count} 此项的计数序号,从1开始 
${varStatus.first} 此项是否是第一项,布尔值 
${varStatus.last} 此项是否是最后一项,布尔值 
${varStatus.begin} 此次迭代的起始索引,对应<c:foreach>中begin属性值 
${varStatus.end} 此次迭代的终止索引,对应<c:foreach>中end属性值 
${varStatus.step} 此次迭代的跳跃步伐,对应<c:foreach>中step属性值 
c:if标签(常用)
代码语言:javascript复制
<c:if test="condition" var="varName" scope="scope">
         ……
</c:if>
判断的结果
判断结果存放的作用域
c:url标签
代码语言:javascript复制
<c:url  value="url" />
c:param标签
代码语言:javascript复制
<c:param name="name"  value="value"/>
参数的名称
参数的值
c:import标签
代码语言:javascript复制
<c:import url="URL" />
导入资源的路径
fmt:formatDate标签
代码语言:javascript复制
<fmt:formatDate  value="date"  pattern="yyyy-MM-dd HH:mm:ss"/>
时间对象
显示格式

0 人点赞