EL表达式与JSTL标签

发布于:2023-01-04 ⋅ 阅读:(193) ⋅ 点赞:(0)

目录

1.EL(表达式语言)

1.1EL的概述

1.2EL内置对象

2.JSTL标签

2.1JSTL标签使用步骤:

2.2JSTL标签库:

 2.3 core标签库常用标签:

2.4fmt标签库常用标签


1.EL(表达式语言)

1.1EL的概述

EL的作用:

  JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。

jsp 写java代码: <%= %> <% %>

EL表达式替换 <%= %> 

EL的格式:

${}  //el表达式语法
${表达式}

el表达式失效:  

1.单个EL表达式失效: \${}

2.整个jsp页面el表达式都失效, 原因: page指令中使用 isELIgnored="true" 忽略整个jsp页面EL表达式

EL表达式使用的符号:  

1.java中算术运算符,比较运算符, 逻辑运算符都可以在EL表达式使用

2.${empty 对象} 对象可以字符串, 可以java对象, 也可以集合对象

判断字符串是否是空: null "" 都表示空 返回true 否则 false

java对象: null

集合对象: null 或者 集合的size == 0 表示空

 EL的最大亮点:

在JSP中使用域对象获取域中的数据: 域对象.getAttribute()

使用EL表达式替换域对象.getAttribute()

之前在jsp页面使用 <%=域对象.getAttribute("xx") %>如果域中没有这个数据,返回null

<%= %>就把null直接显示在页面.

上面的代码使用EL表达式简化: ${xx}, EL表达式如果结果为null, 在页面不显示

1.2EL内置对象

 EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。

  1. pageScope page域对象

  2. requestScope request域对象, 不能代表request对象

  3. sessionScope session域对象

  4. applicationScope application域对象

  5. param 获取url参数

  6. paramValues 获取url参数,一个key对应多个值

  7. header 获取请求头

  8. headerValues 获取请求头,一个key对应多个值

  9. initParam: 获取全局初始化参数

  10. cookie : 获取cookie

  11. pageContext: 获取到前面10个对象

2.JSTL标签

2.1JSTL标签使用步骤:

1.导入jar: jstl的jar

2.在使用jstl标签的jsp页面, 引入标签库

使用taglib 指令引入

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c;

  • uri="Oracle Java Technologies | Oracle":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件

2.2JSTL标签库:

JSTL一共包含四大标签库:

  • core:核心标签库,我们学习的重点;

  • fmt:格式化标签库,只需要学习一个标签即可;

  • sql:数据库标签库,不需要学习了,它过时了;

  • xml:xml标签库,不需要学习了,它过时了。

 2.3 core标签库常用标签:

out:

<c:out value=”aaa”/> 输出aaa字符串常量
<c:out value=”${aaa}”/> 与${aaa}相同
<c:out value=”${aaa}” default=”xxx”/> 当${aaa}不存在时,输出xxx字符串
<%request.setAttribute("a","<script>alert('hello');</script>");%> <c:out value="${a }" default="xxx" escapeXml="false" /> 当escapeXml为false,不会转换“<”、“>”。这可能会受到JavaScript攻击。

set:

<c:set var=”a” value=”hello”/> 在pageContext中添加name为a,value为hello的数据。
<c:set var=”a” value=”hello” scope=”session”/> 在session中添加name为a,value为hello的数据。

if:

 if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

<c:set var="a" value="hello"/>

<c:if test="${not empty a }">

	<c:out value="${a }"/>

</c:if>

choose:

choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。

<c:set var="score" value="${param.score }"/>
<c:choose>
	<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
	<c:when test="${score >= 90 }">A级</c:when>
	<c:when test="${score >= 80 }">B级</c:when>
	<c:when test="${score >= 70 }">C级</c:when>
	<c:when test="${score >= 60 }">D级</c:when>
	<c:otherwise>E级</c:otherwise>
</c:choose>

forEach:

forEach当前就是循环标签了,forEach标签有多种两种使用方式:

  • 使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {};

  • 循环遍历集合,类似for(Object o : 集合);

 遍历集合或数组方式:

<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍历List :

<%
	List<String> names = new ArrayList<String>();
	names.add("zhangSan");
	names.add("liSi");
	names.add("wangWu");
	names.add("zhaoLiu");
	pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍历Map:

<%
	Map<String,String> stu = new LinkedHashMap<String,String>();
	stu.put("number", "N_1001");
	stu.put("name", "zhangSan");
	stu.put("age", "23");
	stu.put("sex", "male");
	pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
	<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>

forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。

  • count:int类型,当前以遍历元素的个数;

  • index:int类型,当前元素的下标;

  • first:boolean类型,是否为第一个元素;

  • last:boolean类型,是否为最后一个元素;

  • current:Object类型,表示当前项目。

<c:forEach var="item" items="${ns }" varStatus="vs">
	<c:if test="${vs.first }">第一行:</c:if>
	<c:if test="${vs.last }">最后一行:</c:if>
	<c:out value="第${vs.count }行: "/>
	<c:out value="[${vs.index }]: "/>
	<c:out value="name: ${vs.current }"/><br/>
</c:forEach>

2.4fmt标签库常用标签

fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。  

格式化时间:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
......
<%
	Date date = new Date();
	pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>

格式化数字:  

<%
	double d1 = 3.5;
	double d2 = 4.4; 
	pageContext.setAttribute("d1", d1);
	pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>

0.00

必须且仅能保留两位小数,如果大于两位,那么只保留两位,并四舍五入,如果小于两位,那么使用0补足两位。

#.##

最多显示两位,如果小于两位,那么有几位保留几位,不会用0补足。大于两位,只保留两位,并四舍五入

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到