Servlet_JSP_EL&JSTL

1.EL表达式:        EL表达式主要用于获取后端传递到页面的数据 和 运算

        语法:        ${表达式}

       获取值:        EL表达式可以从四大域对象中获取数据(page域==>request域==>session域==>appliction域)

                $(域名称.键名):

域名城对应域
pageScopepageContext
requestScoperequest
sessionScopesession
applicationScopeServletContext
<!-- 如在servlet中通过request存入了name=admin,在jsp中通过EL表达式来获取 -->
${requestScope.name}

                ${键名}:        表示依次从最小的域中查找是否有该键对应的值,直到找到为止

                获取对象、List集合、Map集合的值:

	 	<!-- 对象:${域名称.键名.属性名} -->
	 	<h4>对象获取</h4>
		${group.name }

		<!--  Map集合:${域名称.键名.key名称},${域名称.键名["key名称"]} -->
		<h4>map获取</h4>
		map.k1 : ${map.k1 }<br>
		map.k2 : ${map.k2 }
	 	
	 	<!-- 数组: -->
		<h4>数组操作</h4>
		strArr[0] : ${strArr[0] }
		
		<!--  List集合:${域名称.键名[索引]} -->
		<h4>集合操作</h4>
		<!--  [index] 超过下标 ,获取不到数据, 而 get(index) 超出下标 会报错 -->
		groups[1].name : ${groups[1].name }
 
        groups.get(2).name : ${groups.get(2).name }

        运算:        算数、比较、逻辑、空运算(empty)

<h3>测试empty</h3>
v1 : ${empty v1 }

<h3>运算符支持</h3>
<!-- 结果为: 1+1= 2 -->
1+1= ${1+1 }

<h3>逻辑运算符支持</h3>
${10>20 && 10<20 }

        :        EL表达式获取一个不存在的数据时,返回的是一个空字符串""

<!--
    通过 域对象名.getAttribute("key")获取一个不存在的数据时,返回为null
-->
<%
    String username = (String)request.getAttribute("username");
    out.print(username);
%>


<!-- 而EL表达式获取一个不存在的数据时,返回的是一个空字符串"" -->
${requestScope.username}

2.JSTL标签库:

        导包:

         引入包:

                核心库:        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>        

                        c:out:

<!-- c:out向页面直接输出 -->
<c:out value="123"></c:out>

<!-- 
    c:out 与  EL表达式 的区别:
        1.两者找一个不存在的参数时,均为空,但是c:out可以通过default属性进行设置
        2.使用EL表达式 会解析字符串中的HTML标签,而c:out需要通过escapeXml属性设置是否逃脱XML解析, 默认是true,
-->

<!-- 设置默认值: 
        1 使用default属性 
        2 在开始和结束标签内 
-->
<c:out value="${asd }" default="数据不小心走丢了~" />

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

<!-- escapeXml : 设置是否逃脱XML解析, 默认是true,  -->

                         c:set 和 c:remove:        设置变量值和对象属性

<!-- 
    相当于 session.setAttribute("userId","root");
    
    value: 要存储的值
    scope: var属性的作用域
    var:   存储信息的变量

-->
<c:set value="root" var="userId" scope="session" />

<!-- 删除 相当于 removeAttribute -->
<c:remove var="userId" />

                        c:if:        gt==>大于        lt==>小于        eq==>等于

<!-- 
    test: 条件判断 
    var:    用于存储条件结果的变量
    scope:    var属性的作用域,默认page
-->
<c:if test="${v1 lt v2 }">
		v1 大于 v2
</c:if>

<!-- 判断为空 -->
<c:if test="${empty v1 }"></c:if>

                        c:choose:        分支语句

<!-- 
    c:choose,c:when,c:otherwise:
        相当于 switch语句或者 if else多分支语句
 -->
	<c:choose>
		<!-- c:when: 相当于case -->
		<c:when test="${v1 > v2 }">
			v1 大于 v2
		</c:when>
		<c:when test="${v1 eq v2 }">
				v1 等于 v2
		</c:when>

		<!-- c:otherwise: 相当于default -->
		<c:otherwise>v1 小于 v2</c:otherwise>
	</c:choose>

                        c:forEach:        循环遍历

<!-- 
    items: 通过EL表达式获取集合
    var: 将遍历的每个对象放到var参数中
    begin: 第一个要遍历的元素的下标
    end: 最后一个要遍历的元素的下标
    varStatus: 
        index: 当前迭代的元素在集合中的索引,从0开始
        count: 当前迭代的元素是集合中第几个元素,从1开始,即每个元素的下标
-->
<c:forEach items="${groups }" var="group">
    ${group.id }:${group.name }:${group.age }
</c:forEach> 

<!-- map遍历 -->
<c:forEach items="${map }" var="entry">
    ${entry.key }:${entry.value }
</c:forEach>

                        c:forTokens:        通过指定分隔符将字符串分隔为一个数组然后进行遍历

<!-- 以#分割一个字符串,得到字符串数组,遍历这个数组,把每位元素复制给v -->
<c:forTokens items="${str }" delims="#" var="v">
    ${v }
</c:forTokens>

                        c:import:         检索一个绝对或相对 URL,然后将其内容暴露给页面

<!-- 页面包含 -->
<c:import url="http://www.baidu.com"></c:import>

                        c:redirect:        重定向至一个新的UR

<!-- 
    url:    目标url
    context:    紧接着一个本地网络应用程序的名称
 -->
<c:redirect url="/JSTL/index.jsp"  context="/"></c:redirect>

                格式化:        <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

                        fmt:formatDate:        使用指定的风格或模式格式化日期和时间

EL表达式获取时间 : ${today }
<!-- 
    type="date":    默认,2021-8-25
    type="time":    16:15:23
    type="both":    2021-8-25 16:15:23
-->
<fmt:formatDate value="${today }"  type="date"/>

<!--
    dateStyle="short":    简写,21-8-25
    dataStyle="medium":    默认,正常显示2021-8-25
    dataStyle="long":    2021年8月25日
    dataStyle="full":    2021年8月25日 星期三
    
    timeStyle 与 dataStyle 相似
-->
<fmt:formatDate value="${today }"  dateStyle="short"/>

<!--
    pattern:    自定义格式
    var:    存储格式化日期的变量名
        如果不使用var,格式化语句在哪里,就把内容显示到哪里,如果加上var,这里就不再显示,需要单独调用
-->
<fmt:formatDate value="${today }"  pattern="yyyy/MM-dd= HH时mm分ss秒SSS"  var="currentDate"/>
${currenDate }

                        fmt:formatNumber:        使用指定的格式或精度格式化数字

<!--
    pattern:    自定义的格式化模式
    groupingUsed:    是否对数字分组(是否加入千分位) (TRUE 或 FALSE),默认为true
    maxIntegerDigits:    整型数最大的位数    minIntegerDigits:    整型数最小的位数
    maxFractionDigits:    小数点后最大的位数
    var:    存储格式化数字的变量
    type:    number,currency(货币),precent(百分数)
    
-->
<!-- # 不会补位,0会补位 -->
<fmt:formatNumber value="${n }"  pattern="###,###.####"/>
<fmt:formatNumber value="${n }"  pattern="###,###.0000"/>

<!-- currencySymbol:指定货币符号 -->
<fmt:formatNumber value="${n }"  type="currency"  currencySymbol="$"/>

                函数:        <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值