带你快速入门EL表达式和JSTL的使用

EL表达式

简介

Expression Language 表达式语言,为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

语法:${表达式}

忽略el,不会解析表达式,原因:

  • page指令中定义 isElIgnored=“true”
  • \${表达式}

功能:

  • 简单的运算
  • 取出域对象中的参数并在页面展示

运算符

1.算术  + - * /(div)  %(mod)
2.比较  >  <  >=  <=  ==  !=
3.逻辑  &&(and)  ||(or)  !(not)
4.empty 判断字符串,数组,集合的对象是否为null,也可以判断长度是否为0
	${empty list} :null--true 
    ${empty ""}  true
    集合:${not empty list}   list!=null&&list.size()!=0
    字符串:${not empty str}    str!=null&&str.length()!=0
    数组:${not empty arr}    arr!=null&&arr.length!=0

内置对象

EL有11个内置对象,这里主要讲域属性相关的4个
EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型
分类内置对象名称描述
域对象pageScopepage作用域
requestScoperequest作用域
sessionScopesession作用域
applicationScopeapplication作用域
请求参数param用于获取请求参数的值,应用在参数值只有一个的情况。在应用param隐含对象时,返回结果为字符串。
paramValues用于当请求参数名对应多个值时获取参数的结果,在应用paramValues隐含对象时,返回结果为数组。
请求头header用于获取HTTP请求的一个具体的header的值。
headerValues用于获取HTTP请求的一个具体的header的值,但是在有些情况下,可能存在同一个header拥有多个不同的值的情况,这时就必须使用headerValues隐含对象。
JSP上下文对象pageContext页面上下文对象为pageContext,用于访问JSP内置对象(例如request、response、out、session、exception和page等,但不能用于获取application、config和pageContext对象)和servletContext。在获取到这些内置对象后,就可以获取其属性值。
全局初始化对象initParam用于获取Web应用初始化参数的值。
cookiecookie用于获取cookie对象,如果在cookie中已经设置一个名为username的值,那么可以使用 ${cookie.username} 来获取该cookie对象。但是如果要获取cookie中的值,需要使用cookie对象的value属性。
  • 获取域对象中的参数
*   1.pageScope
    2.requestScope
    3.sessionScope
    4.applicationScope
* 取域中的数据
    1. ${内置域对象.key}
    2. ${key} 在四个域对象中从小到大的范围依次查找,如果没有数据,只显示空字符串,不会显示null
  • 获取域对象中的对象的值
1.域中存储的是javabean对象
	${域名称.键值.对象属性名}
2.域中存储的是list集合
	${域名称.键值[索引]}
3.域中存储的是map集合
	${域名称.键值.key} 或 ${域名称.键值["key"]}
4.域中存储的是数组
	${域名称.键值[索引]}

实例代码:

//    案例一
    Emps emps=new Emps();
    emps.setName("孙权");
    emps.setAge(36);
    Elephant elephant=new Elephant();
    elephant.setName("东东");
    elephant.setAge(18);
    emps.setElephant(elephant);
    pageContext.setAttribute("emps",emps);

//    案例二
    ArrayList<Emps> list=new ArrayList<>();
    list.add(emps);
    pageContext.setAttribute("list",list);

//    案例三
    HashMap<String,Emps> map=new HashMap<>();
    map.put("three",emps);
    pageContext.setAttribute("map",map);

%>
${pageScope.emps}<br>
${pageScope.emps.name}<br>
${pageScope.emps.age}<br>
${pageScope.emps.elephant}<br>
${pageScope.emps.elephant.name}<br>
${pageScope.emps.elephant.age}<br>

<h2>案例二</h2>
${pageScope.list[0]}
<br>
${pageScope.list.get(0)}

<h2>案例三</h2>
${pageScope.map.three}<br>
${pageScope.map.three.elephant}<br>
${pageScope.map.three.elephant.name}<br>
${pageScope.map['three'].elephant}<br>
${pageScope.map['three'].elephant.age}<br>
  • 其他重要内置对象
1.pageContext 获取jsp中其它8个内置对象
	*jsp页面动态获取虚拟路径(网络工程名) ${pageContext.request.contextPath}
	
2.param  ==> String value= request.getParameter("参数名");

3.paramValues ==> String [] values =  request.getParameterValues("参数名");

JSTL

概念

java Server Pages Tag Library jsp中的标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。

在使用前需要导入jar包,标准包能在tomcat安装目录找到。
在这里插入图片描述

主要:所有的jar包都要部署在服务器上。文件拷贝到 /WEB-INF/lib/ 下。

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

  • if标签
1. <c:if test="true">
   </c:if>
   
2. <c:if test="${}">
   </c:if>  
  • choose标签
<c:set var="m" value="11" scope="page"></c:set>
<c:choose>
    <c:when test="${m>=1 && m<=3}">
        <h3>spring</h3>
    </c:when>
    <c:when test="${m>=4 && m<=6}">
        <h3>summer</h3>
    </c:when>
    <c:when test="${m>=7 && m<=9}">
        <h3>autumn</h3>
    </c:when>
    <c:otherwise>
        <h3>winter</h3>
    </c:otherwise>
</c:choose>
  • foreach标签
<c:forEach begin="0" end="10" step="1" var="i"> 
<%--会自动将变量i存进pageContext域对象中--%>
    ${pageScope.i}  
    - ${requestScope.i}  
    - - ${sessionScope.i}
    - - ${applicationScope.i} 
    - <br>
</c:forEach>
<%--2.增强for
String [] arr={"abc","haha","hehe"};
for(String s:arr){
   System.out.println(s);
}
--%>

<%
    String [] arr={"abc","haha","hehe"};
    request.setAttribute("arr",arr);
%>
<c:forEach var="s" items="${requestScope.arr}" varStatus="vs" >
<%--会自动将变量s和对象vs 都存进pageContext域对象中--%>
    ${s} 
    -- ${vs.count}
     -- ${vs.index}<br>
</c:forEach>
items属性:使用el从域对象中取出集合或数组
forEach会遍历集合或数组,将每个值赋给var中变量a
var属性:将变量s,存进pageConText域对象中,因此可以用${s}取出域对象的参数值
varStatus=“status”事实上定义了一个status名的对象作为varStatus的绑定值。
该绑定值也就是status封装了当前遍历的状态。
${status.index}      输出行号,从0开始。
${status.count}      输出行号,从1开始。
${status.current}   当前这次迭代的(集合中的)项
${status.first}  判断当前项是否为集合中的第一项,返回值为true或false
${status.last}   判断当前项是否为集合中的最后一项,返回值为true或false
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heart of sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值