EL表达式和JSTL表达式
来源:互联网 发布:网络大电影排名 编辑:程序博客网 时间:2024/06/06 07:39
EL:Expression Language(表达式语言)
EL的功能:
替代JSP页面中数据访问时的复杂编码
<!-- EL功能体现:替换小脚本//在JSP中使用Java脚本的局限//在JSP页面中嵌入大量的Java代码//访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换--><% Employee employee = (Employee) request.getAttribute("employee"); Computer comp = employee.getComputer(); String manufacturer = comp.getManufacturer();%><!-- EL只需要一句,就可以替代java脚本 -->${requestScope.employee.computer.manufacturer}
EL的特点:
自动转换类型 EL得到某个数据时可以自动转换类型 简单易用
EL的语法:
${ EL expression }
EL的4种取值范围:
pageScope,requestScope,sessionScope,applicationScope
注意:
1、${pageScope.username}表示在page作用域查找变量username,找不到返回null2、如果在表达式中不标明作用域,则按照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] }<br/>姓名:${ names[1] }<br/>//注意:使用[ ]指定元素下标
Map
// 在Servlet或JSP中保存数据Map names = new HashMap();names.put("one", "LiYang");names.put("two", "WangHua");request.setAttribute("names", names);// 在JSP中访问数据姓名:${ names.one }<br/>姓名:${ names["two"] }<br/>
注意:
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"}
falsetrue
!=
或者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}
tureempty操作符
①、若变量 a
为null
,或长度为零的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、作用域访问对象
2、参数访问对象
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中进行如下配置:
<?xml version="1.0" encoding="UTF-8"?><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>*.jsp</url-pattern> <el-ignored>true</el-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个隐含对象:
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中
<c:set var="variable" value="value" scope="scope" />
2、将value值设置到对象的属性中
<c:set target="target" property="property" value="value" />// 在Servlet或JSP中设置JavaBeanUser user = new User(); request.setAttribute("user", user);// 在JSP中修改JavaBean的属性值<c:set target="${user}" property="name" value="defaultName" />
out:计算表达式并将结果输出显示
1、不指定默认值
语法:<c:out value="value" />
2、指定默认值
语法:<c:out value="value" default="default" />// 在Servlet或JSP中设置JavaBeanUser user = new User(); request.setAttribute("user", user);// 在JSP中输出JavaBean的属性值<c:out value="${user.name}" default="No UserName" />
3、转义特殊字符
<p>${"<a href='http://www.baidu.com'>百度</a>"}</p><p><c:out escapeXml="false" value="<a href='http://www.baidu.com'>百度</a>" /></p><c:out value="<a href='http://www.baidu.com'>百度</a>" />//前两个显示百度链接,而第三个则为一串字符串"<a href='http://www.baidu.com'>百度</a>"
注意:
1、<c:out>
标签,类似于JSP中的<%=%>
,<c:out>
标签可以指定默认值,<%=%>
则不能,最好添加默认值
remove:删除指定作用域内的变量
语法:<c:remove var="variable" scope="scope" />
例子:
<!-- 设置之前应该是空值 -->设置变量之前的值是:msg=<c:out value="${msg}" default="null" /><br/><!-- 给变量msg设值 --><c:set var="msg" value="Hello World!" scope="page"></c:set><!-- 此时msg的值应该是上面设置的“Hello World!” -->设置新值以后:msg=<c:out value="${msg}"></c:out><br/><!-- 把 msg变量从page范围内移除--><c:remove var="msg" scope="page" /><!-- 此时msg的值应该显示null -->移除变量msg以后:msg=<c:out value="${msg}" default="null"></c:out>
if条件标签:
<c:if test="codition" var="variable" scope="scope" > …</c:if>test属性:判断条件表达式返回true/false var属性:该变量用于保存返回的true/false scop属性:指定var变量的作用域
表单1:使用if标签判断是否登录
<c:set var="isLogin" value="${empty sessionScope.user}"/><c:if test="${isLogin}">…登录表单</c:if><c:if test="${! isLogin}">…已经登录</c: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:实现对集合对象的遍历
<c:forEach items="collection" var="varName" begin="start" end="end" step="stepSize" varStatus="status"> …循环体代码…</c:forEach>items属性:指定要遍历的集合对象var属性:指定当前成员的引用begin属性:指定从集合的第几位开始end属性:指定迭代到集合的第几位结束step属性:指定循环的步长varStatus属性:用于存放var引用的成员的相关信息,如索引等
2、forEach:指定迭代的次数
<c:forEach begin="start" end="end" step= "stepSize"> …循环体代码…</c: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><!-- 注意对比varStatus的index和count属性的区别 -->
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>
阅读全文
0 0
- el表达式和jstl
- EL和JSTL表达式
- EL和JSTL表达式
- JSTL和EL表达式
- EL和JSTL表达式
- jstl和el表达式
- JSTL和EL表达式
- el和jstl表达式
- JSTL和EL表达式
- EL表达式和JSTL
- EL表达式和JSTL
- el表达式和jstl
- EL和JSTL表达式
- EL表达式和JSTL
- JSTL和EL表达式
- EL表达式和JSTL表达式
- EL表达式和JSTL表达式
- EL表达式和JSTL标签
- 分享 | 全职在家工作/读书应该如何保持效率
- 玩转python类
- Freedom Trail(leetcode)
- 快讯:无穷小微积分官方网站,从天而降,惊喜万分!
- Linux安装ftp组件
- EL表达式和JSTL表达式
- c++模板
- 霸气女创始人刘楠:我挖了迪士尼高管,2年把公司干到100亿!
- Java字符串
- NOIP模拟9.21
- NYOJ 308 Substring
- 三种实例化bean的方式
- spring boot 管理bean初始化方法,以及销毁方法
- Cereal library--序列化类型