5.ELJSTL

1 EL表达式

1.1 什么是EL表达式,EL表达式的作用?

​ EL表达式的全称是:Expression Language,是表达式语言。

作用:EL表达式主要代替jsp页面中的表达式脚本在jsp页面中进行数据的输出==>EL表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多。

格式:${表达式}

注意:EL表达式在输出NULL值的时候,输出为""空串,而非NULL

1.2 EL表达式搜索域数据的数据

​ EL表达式主要是为了在jsp页面中输出域对象中存储的数据。如果出现重名的情况下,优先输出域范围小的值,如果想要输出指定域中的值,可以使用sessionScope等对象指定输出。

<%
request.setAttribute("key","value");
session.setAttribute("key","session");
%>
jsp的表达式脚本:<%=request.getAttribute("key")%>
EL表达式: ${pageScope.values()} ${requestScope.values()} ${sessionScope.values()} ${applicationScope.values()}

1.3 EL表达式的使用

​ bean的属性,数组属性,List集合属性,map集合属性。

<%//定义伪造一些数据,用来测试El的输出是否存在问题。Person person=new Person();person.setName("龙哥帅");person.setPhones(new String[]{"111111","2222222","333333"});ArrayList list = new ArrayList<>();list.add("洛阳");list.add("郑州");list.add("杭州");person.setCities(list);HashMap map = new HashMap<>();map.put("key1","value1");map.put("key2","value2");map.put("key3","value3");person.setMap(map);pageContext.setAttribute("person",person);
%>
<%--输出person对象,重写了toString之后,输出则为toString的信息--%>${person}
<%--输出属性:name。调用的是getName方法--%>${person.name}
<%--输出数组--%>${person.phones[0]}
<%--输出list集合--%>${person.cities}
<%--输出list集合中的某个下标的值:下标从0开始--%>${person.cities[1]}
<%--输出map中信息--%>${person.map}
<%--输出map中的某个key的值--%>${person.map.key1}

注意:当输出为javaBean的属性的时候:输出的时候找的不是那个属性,而是那个获取属性的方法,默认调用的为get方法。

1.4 EL表达式–运算

1)关系运算
在这里插入图片描述

2)逻辑运算
在这里插入图片描述
3)算数运算符
在这里插入图片描述
4)empty运算:判断一个数据是否为空,是则输出true,否则输出false

格式:${empty key}

以下几种情况为空:返回为true

  • 值为null值的时候

  • 值为空串的时候,为空

  • 值为Object类型数组,长度为零的时候

  • list集合,元素个数为零

  • map集合,元素个数为零

5)三元运算

​ 表达式1?表达式2:表达式3==>如果表达式1的值为真,则返回表达式2,否则返回表达式3。

6)点运算,[ ]运算

  • 点运算:输出Bean对象中某个属性的值,可以输出map中不含有特殊字符的key的值。
  • [ ]中的运算:输出有序集合中某个元素的值,并且可以输出map集合中key里含有特殊字符(例如:“-”)的key的值。例如:${ map[‘a.a.a.a’]}

7)字符串的拼接

​ 使用+=来实现字符串的拼接。

1.5 El表达式中的11个隐含对象

变量类型作用
pageContextpageContextImpl获取jsp中的九大内置对象
pageScopeMap获取pageContext域中的数据
requestScopeMap获取request域中的数据
sessionScopeMap获取session域中的数据
applicationScopeMap获取application域中的数据
paramMap获取请求参数的值
paramValuesMap获取请求参数的多个值
headerMap获取请求头的信息
headerValuesMap获取请求头,多个值的情况
cookieMap当前请求的cookie信息
initParamMap获取web.xml中配置的

1)EL获取四个特定域中属性

域对象获取域对象中存储的值
pageScope${pageScope.key}
requestScope${requestScope.key}
sessionScope${sessionScope.key}
applicationScope${applicationScope.key}
<%
request.setAttribute("key","value");
session.setAttribute("key","session");
%>
jsp的表达式脚本:<%=request.getAttribute("key")%>
EL表达式: ${pageScope.values()} ${requestScope.values()} ${sessionScope.values()} ${applicationScope.values()}

2)pageContext

获取jsp九大内置对象。

<%--常见的使用方式--%>协议:${pageContext.request.scheme}
服务器的ip:${pageContext.request.serverName}
服务器的端口号:${pageContext.request.serverPort}
工程路径:${pageContext.request.contextPath}
请求的方式:${pageContext.request.method}
获取客户端ip:${pageContext.request.remoteHost}
获取会话sessionID:${pageContext.session.id}
<%--可以将request存到域对象中,然后使用req调用方法--%> <%pageContext.setAttribute("req",request);%>${req.scheme}

3)其他隐含对象的使用

  • param和paramValue的使用
http://localhost:8080/10_EL_JSTL/otherElE.jsp?username=%22%E5%BC%A0%E4%B8%89%22&hobby=football&hobby=basketball
<%--param的使用:输出请求的参数,如果多个value则只能输出第一个value--%>${param}  <%--默认输出是key-value--%>${param.username}
<%--paramValues使用:输出key对应多个值--%>${paramValues.hobby}
${paramValues.hobby[1]} <%--header和headerValues的使用:获取请求头的信息--%>${header}
${header['User-Agent']} <%--因为存在特殊符号,所以需要使用[]来进行输出--%>${headerValues['User-Agent'][0]}
<%--cookie的使用--%>${cookie.JSESSIONID}
${cookie.JSESSIONID.name}
${cookie.JSESSIONID.value}
<%--initParam的使用,获取上下文参数--%>${initParam}
${initParam.username}

2 JSTL

2.1 什么是JSTL标签库?

​ JSTL全称为JSP Standarded Tag Library。jsp标准标签库,是开源的jsp标签库,非jsp的规范,使用的时候需要导入jar包。

EL表达式主要为了替换jsp中的表达式脚本,而标签库是为了替换代码脚本。使得jsp页面变得更加简洁。

2.2 JSTL由五个不同功能的标签库组成。

在这里插入图片描述

2.3 使用步骤

1)导入jar包。

taglibs-standard-impl-1.2.1.jar

taglibs-standard-spec-1.2.1.jar

2)使用taglib引入标签库。

<%@taglib prefix=“curi=“http://java.sun.com/jsp/jstl/core” %>

2.4 一些常见的用法

<%--c:set:可以往域中保存数据scope属性设置保存到哪个域。var属性设置key是多少value属性设置值
--%>
保存之前:${requestScope.username}

保存之后:${requestScope.username}
<%--c:if:用来做if判断test属性用来设置判断的条件,使用EL表达式 --%>

龙哥帅气

<%--c:choose;c:when;c:otherwise:配合使用实现多路判断。类似为switch--casechoose标签开始进行判断when标签开始判断每一种情况otherwise标签表示其他情况代码会从上到下开始执行,一旦满足,则执行完代码跳出循环。注意点:1.标签内不要使用HTML注释,;如果需要使用注释,则使用JSP注释/<%----/%>2.c:when使用的时候,其父标签一定要是c:choose。可以用来实现嵌套。 --%>

你是姚明

你长得真高

三级残废

<%--c:foreach:遍历输出使用begin属性设置起始值。end属性设置结束值。var属性表示循环的变量(也是当前正在遍历到的数据)。step属性设置步长,如果不设置,默认为1. --%> <%--1.遍历1-10 --%>
第${i}行

<%--2.遍历Object数组items属性设置遍历的数据源.var表示当前遍历的数据--%> <%request.setAttribute("arr",new String[]{"zhangsan","lisi","wangwu"}); %> ${item}
<%--3.遍历map --%> <%HashMap map = new HashMap<>();map.put("key1","value1");map.put("key2","value2");map.put("key3","value3");request.setAttribute("map",map); %> ${key}${key.key}==${key.value}
<%--4.foreach遍历list集合--%> <%ArrayList students = new ArrayList<>();students.add(new Student(1,"张三","1997",23,"111111"));students.add(new Student(2,"李四","1990",30,"222222"));students.add(new Student(3,"王五","1987",33,"333333"));request.setAttribute("stus",students); %>
idusernamepasswordagephone操作
${item.id}${item.username}${item.password}${item.age}${item.phone}

<%--var表示遍历到的数据items表示遍历的集合begin-end表示遍历的开始索引值以及结束索引[begin,end],索引从0开始。varStatus:是当前遍历到的数据的状态。输出发现是一个内部类,实现了一个接口。接口口中存在一些方法。 --%>
idusernamepasswordagephone操作
${item.id}${item.username}${item.password}${item.age}${item.phone}${status.current}

其他标签的使用:

core中常用的标签

1.catch标签:

<%--1.catch:如果代码出现异常,则进行捕获,并存入到page域中 --%> <%=1/0 %> ${e}

2.out标签:

<%--2.out:输出内容到页面中去 ,escapeXml="true":默认将里面的内容当成字符串进行输出,如果改为false则会对其中的内容进行解析。 --%>

3.set标签:

<%--3.set:往指定的域中添加属性,默认为pageContext中添加属性.scope来指定需要添加到的指定域--%>

4.redirect标签:

<%--4.redirect:重定向,默认路径修改为当前项目下。 --%> <%-- --%>

5.remove标签:

<%--5.remove:移除指定域的指定属性,如果不设置则移除所有域中的该属性 --%>

6.if标签:

<%--6.if:if判断。test属性添加需要测试的条件 --%> message=${requestScope.message}

7.choose标签:

<%--7.choose:进行判断。配合c:when,c:otherwise来进行使用 --%>

你是姚明

你长得真高

三级残废

8.foreach标签:

<%--8.foreach:循环 ,将变量i放到pageContext域中--%>

8.1foreach遍历数:

index=${index.index},i=${i}

8.2foreach遍历数组:

<% int[] arr=new int[]{1,2,3,3,2,1};request.setAttribute("arr", arr); %> ${status.index}==${i}

8.3foreach遍历对象数组:

<% request.setAttribute("names",new String[]{"zhangsan","lisi","wangwu"}); %> ${item}
<%--遍历map--%>

8.4foreach遍历map:

<%HashMap map = new HashMap<>();map.put("key1","value1");map.put("key2","value2");map.put("key3","value3");request.setAttribute("map",map); %> ${entry}${entry.key}==${entry.value}

9.url标签:

<%--9.url:会自动在前面添加项目的路径--%>
当前的项目路径: ${pageContext.request.contextPath}
当前页面路径 ">当前页面路径

2.5 status类实现的接口中定义的一些方法

方法作用
public Object getCurrent()表示获取当前遍历到的对象
public int getIndex()表示获取遍历的索引
public int geCount()表示遍历的个数
public boolean isFirst()表示是否是第一个
public boolean isLast()是否是最后一个
public Integer getBegin()获取begin的属性值
public Integer getEnd()获取end属性值
public Integer getStep()获取step的属性值

拓展:jstl标签库的源码

taglibs-standard-1.2.1-source-release.zip

dex() | 表示获取遍历的索引 |
| public int geCount() | 表示遍历的个数 |
| public boolean isFirst() | 表示是否是第一个 |
| public boolean isLast() | 是否是最后一个 |
| public Integer getBegin() | 获取begin的属性值 |
| public Integer getEnd() | 获取end属性值 |
| public Integer getStep() | 获取step的属性值 |

拓展:jstl标签库的源码

taglibs-standard-1.2.1-source-release.zip


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部