El表达式&JSTL标签库
Posted 暴躁的程序猿啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了El表达式&JSTL标签库相关的知识,希望对你有一定的参考价值。
El表达式&JSTL标签库
El表达式的全称是:Expression Language 是表达式语言
作用:EL表达式主要是替代Jsp页面中的表达式脚本在Jsp页面中进行数据的输出;
页面中开启el表达式支持
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false" %>
<body>
<%
request.setAttribute("name","伊丽莎白");
%>
表达式脚本输出key的值是:<%=request.getAttribute("name")%>
El表达式输出key的值是:$name
</body>
输出
表达式脚本输出key的值是:伊丽莎白 El表达式输出key的值是:伊丽莎白
El表达式的格式:$表达式
EL表达式在输出null的时候,输出的是空串。Jsp表达式脚本输出null值的时候输出null字符串;
EL表达式搜索域数据的顺序
<%
request.setAttribute("key","request");
pageContext.setAttribute("key","pageContext");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
<br/>
El取出的值是:$key
输出:
El取出的值是:pageContext
当四个域中都有相同key数据的时候,El表达式会按照四个域的从小到大顺序去进行搜索,找到就输出;
El表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性
生成一个book用于测试
public class Book
private String name;
private String[] phones;
private List<String> category;
private Map<String,Object> map;
public Book()
public Book(String name, String[] phones, List<String> category, Map<String, Object> map)
this.name = name;
this.phones = phones;
this.category = category;
this.map = map;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String[] getPhones()
return phones;
public void setPhones(String[] phones)
this.phones = phones;
public List<String> getCategory()
return category;
public void setCategory(List<String> category)
this.category = category;
public Map<String, Object> getMap()
return map;
public void setMap(Map<String, Object> map)
this.map = map;
@Override
public String toString()
return "Book" +
"name='" + name + '\\'' +
", phones=" + Arrays.toString(phones) +
", category=" + category +
", map=" + map +
'';
jsp页面
<%
Book book = new Book();
book.setName("《钢铁是怎样炼成的》");
book.setPhones(new String[]"1078","1234","8786");
ArrayList<String> list = new ArrayList<>();
list.add("励志类");
list.add("故事类");
book.setCategory(list);
Map<String, Object> map = new HashMap<>();
map.put("k1","v1");
map.put("k2","v2");
map.put("k3","v3");
book.setMap(map);
pageContext.setAttribute("book",book);
%>
输出book:$book<br/>
输出map:$book.map
输出map中特定的值:$book.map.k3
输出list:$book.category[1]
输出:
输出book:Bookname='《钢铁是怎样炼成的》', phones=[1078, 1234, 8786], category=[励志类, 故事类], map=k1=v1, k2=v2, k3=v3
输出map:k1=v1, k2=v2, k3=v3 输出map中特定的值:v3 输出list:故事类
EL表达式------运算
EL关系运算
$5 == 5或$5 eq 5 <br/>
$5 != 5或$5 ne 5 <br/>
$5 < 5或$5 lt 5 <br/>
$5 <= 5或$5 le 5 <br/>
$5 > 5或$5 gt 5 <br/>
$5 >= 5或$5 ge 5 <br/>
输出
true或true
false或false
false或false
true或true
false或false
true或true
EL逻辑运算
$5 >= 5 && 5==5或$5 >=5 and 5==5 <br/>
$5 >= 5 || 5==5或$5 >=5 or 5==5 <br/>
$ !(5==5) 或 $not (5==5) <br/>
输出
true或true
true或true
false 或 false
EL算数运算
$ 10 + 2 <br/>
$ 10 - 2 <br/>
$ 10 * 2 <br/>
$ 10 / 2 或$ 10 div 2 <br/>
$ 10 % 2 或$ 10 mod 2 <br/>
输出
12
8
20
5.0或5.0
0或0
empty运算
可以判断一个数据是否为空,如果为空,则不输出true,不为空输出false;
以下几种情况为空:
1.值为null值时候,为空
2.值为空串的时候,为空
3.值是Object数组类型,长度为零的时候
4.list集合元素个数为零
5.map集合元素个数为零
<%
request.setAttribute("emptyTest",null);
request.setAttribute("emptyStr","");
request.setAttribute("emptyArr", new Object[]);
ArrayList<Integer> integers = new ArrayList<>();
request.setAttribute("emptyList",integers);
HashMap<String,String> hashMap = new HashMap<>();
request.setAttribute("emptyMap",hashMap);
%>
true
true
true
true
true
三元运算
表达式1?表达式2:表达式3
如果表达式值为真返回表达式2的值 否则返回表达式三的值
"."运算和[]中括号运算符
.运算可以输出bean对象中某个属性的值
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]括号运算,还可以输出map集合中key里含有特殊字符的key的值;
11个EL隐含对象
11个隐含对象是EL表达式中自己定义的们可以直接使用。
EL获取特定域中的属性
pageScope----------------pageContext域
requestScope------------request域
sessionScope------------session域
applicationScope------ application域
使用
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
$pageScope.key
$requestScope.key
$sessionScope.key
$applicationScope.key
输出
pageContext request session application
pageContext对象的使用
1.协议
2.服务器ip
3.服务器端口
4.获取工程路径
5.获取请求方法
6.获取客户端ip地址;
7.获取会话的id编号;
<%--获取请求的协议--%>
<%=request.getScheme()%>
<%=request.getServerName()%>
<%=session.getId()%>
协议:$pageContext.request.scheme<br/>
服务器ip:$pageContext.request.serverName<br/>
服务器端口:$pageContext.request.serverPort<br/>
工程路径:$pageContext.request.contextPath<br/>
请求方法:$pageContext.request.requestURI<br/>
客户端ip地址:$pageContext.request.remoteHost<br/>
获取会话的id编号:$pageContext.session.id<br/>
输出
http localhost C68311AFB304EF1E1CBFEBB626C2CF52 协议:http
服务器ip:localhost
服务器端口:8080
工程路径:
请求方法:/expression.jsp
客户端ip地址:0:0:0:0:0:0:0:1
获取会话的id编号:C68311AFB304EF1E1CBFEBB626C2CF52
EL中其他对象的使用
$param<br/>
$paramValues.name[0]<br/>
$header<br/>
$headerValues<br/>
$cookie<br/>
$initParam<br/>
输出
pass=123, name=zhangsan
zhangsan
sec-fetch-mode=navigate, sec-fetch-site=cross-site, accept-language=zh-CN,zh;q=0.9, cookie=JSESSIONID=5E9DCDC37E5BA99758765648246, sec-fetch-user=?1, (Khtml, like Gecko) 1 SLBChan/3, sec-fetch-dest=document
sec-fetch-mode=[Ljava.lang.String;@3bb706e4, sec-fetch-site=[Ljava.lang.String;@a68f86b, accept-language=[Ljava.lang.String;@74edb052, cookie=[Ljava.lang.String;@3ed0f533, sec-fetch-user=[Ljava.lang.String;@3d53442b, accept=[Ljava.lang.String;@7035584a, host=[Ljava.lang.String;@6943193e, upgrade-insecure-requests=[Ljava.lang.String;@50030048, connection=[Ljava.lang.String;@7756647f, cache-control=[Ljava.lang.String;@2d7b95d7, accept-encoding=[Ljava.lang.String;@5c80e3af, user-agent=[Ljava.lang.String;@14c9b937, sec-fetch-dest=[Ljava.lang.String;@5078424d
JSESSIONID=javax.servlet.http.Cookie@21dcb0b8
JSTL
JSTL标签库全称是指JSP Standard Tag Library Jsp标准标签库。是一个不断完善的开放源代码的JSP标签库。
EL表达式主要是为了替换Jsp中的表达式脚本,而标签库则是为了替换代码脚本,这样使得整个Jsp页面变得更加简洁;
在Jsp标签库中使用taglib指令引入标签库
JSTL标签库使用步骤:
1.先导入maven依赖
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
2.使用用taglib指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Core核心库的使用
1、<c:set/>
set标签可以往域中保存数据
页面头设置:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*" isELIgnored="false" pageEncoding="UTF-8" %>
域对象保存数据之前:$requestScope.name<br/>
<c:set scope="request" var="name" value="王五"></c:set>
域对象保存数据之后:$requestScope.name<br/>
输出:
域对象保存数据之前:
域对象保存数据之后:王五
2、<C:if/>
<c:if test=$10==10>
<h1>条件满足<h1>
</c:if>
满足 条件显示内容
3.<c:choose><c:when><c:otherwise>
作用:多路判断。跟switch … case …default 非常接近
choose标签开始选择判断
when标签表示每一种判断情况 匹配一种输出不再往下进行
test表示当前这种判断情况的值
otherwise表示剩下的情况
例子:
<c:set scope="request" var="num" value="45"></c:set>
<c:choose>
<c:when test="$requestScope.nums>50">
<h3>大于50</h3>
</c:when>
<c:when test="$requestScope.num<50">
<h3>小于50</h3>
</c:when>
<c:when test="$requestScope.num==50">
<h3>等于于50</h3>
</c:when>
<c:otherwise>
<h3>其他数值</h3>
</c:otherwise>
</c:choose>
输出:
小于50
注意事项:1.标签里不能使用html注释,要使用Jsp注释
2.when标签里的父标签一定要是choose标签
3.<c:forEach>标签
作用:遍历输出使用
begin属性设置开始索引
end属性设置结束的索引
var属性表示遍历的变量
例子:遍历输出1-5
<c:forEach begin="0" end="5" var="i">
$ i
</c:forEach>
输出
0 1 2 3 4 5
遍历Object数组
<%
request.setAttribute("arr",new String[]"111","222","333");
%>
<c:forEach items="$requestScope.arr" var="item">
<%--items 表示要遍历的数据源 var 表示当前遍历到的数据--%>
$item
</c:forEach>
遍历Map集合
<%
HashMap<String, Object> map = new HashMap<>();
map.put("k1","v1");
map.put("k2","v2");
map.put("k3","v3");
request.setAttribute("map",map);
%>
<c:forEach items="$requestScope.map" var="entry">
key为:$entry.key<br/>
value为:$entry.value<br/>
</c:forEach>
输出
value为:v1
key为:k2
value为:v2
key为:k3
value为:v3
forEach属性 step:步长 varStatus:表示当前遍历到的数据的状态
status实现了下面的接口 拥有以下方法
public interface LoopTagStatus
//获取当前遍历到的数据
Object getCurrent();
//获取遍历的索引
int getIndex();
//表示遍历的个数
int getCount();
//表示当前遍历的是第一条或最后一条
boolean isFirst();
boolean isLast();
//获取对应的属性值
Integer getBegin();
Integer getEnd();
Integer getStep();
测试
<c:forEach items="$requestScope.map" var="entry" varStatus="status">
<tr>
<td>key为:$entry.key</td>
<td>value为:$entry.value</td>
<td>$以上是关于El表达式&JSTL标签库的主要内容,如果未能解决你的问题,请参考以下文章