Java WEB-EL表达式、JSTL标签库

< a href = “#1”>EL表达式
< a href = “#2”>EL表达式

EL表达式
  • Experssion Language,是表达式语言
  • EL表达式的作用主要是替代jsp页面中的脚本表达式,脚本在jsp页面中进行数据传输
  • EL表达式在输出数据的时候,要比jsp的表达式脚本要简单的多
EL表达式使用
    <%
        request.setAttribute("key", "value");
    %>
    脚本表达式输出key对应的值为:<%= request.getAttribute("key") %> <br>
    EL表达式输出key的值为:${key}
<%--    区别:
       第一个若key无对应的value则输出null
       第二个key若无对应的value则输出空字符串--%>
EL表达式四个域的使用顺序
    <%
        pageContext.setAttribute("key", "1");
        request.setAttribute("key", "2");
        session.setAttribute("key", "3");
        application.setAttribute("key", "4");

    %>

    ${key}

    当四个域中都有key的数据的时候,EL表达式会按照四个域中从小到大顺序取进行搜索,找到数据就输出
EL表达式输出复杂的bean对象
    <%

        Person person = new Person();
        person.setName("国歌好帅");
        person.setPhones(new String[]{"1234", "5678"});

        List<String> cites = new ArrayList<>();
        cites.add("北京");
        cites.add("上海");
        cites.add("深圳");
        person.setCities(cites);

        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        person.setMap(map);

        pageContext.setAttribute("person", person);

    %>

    输出:${person}<br>
    输出person的name属性:${person.name}<br>
    输出list集合值:${person.cities.get(1)}<br>
    输出list集合中的所有值:${person.cities}<br>
    输出数组的属性值:${person.phones[1]}<br>
    输出map集合:${person.map}<br>
    输出map集合中某一值:${person.map.get("key1")}
关系运算、逻辑运算、算数运算
    关系运算
    ${ 1 == 1} 或 ${1 eq 1}<br>
    ${ 1 != 1} 或 ${1 ne 1}<br>
    ${ 1 < 1} 或 ${1 lt 1}<br>
    ${ 1 > 1} 或 ${1 gt 1}<br>
    ${ 1 <= 1} 或 ${1 le 1}<br>
    ${ 1 >= 1} 或 ${1 ge 1}<br>
    <hr>
    逻辑运算
    ${12 == 12 && 12 > 11} 或 ${12 == 12 and 12 > 11}<br>
    ${12 == 12 || 12 > 11} 或 ${12 == 12 or 12 > 11}<br>
    ${!true} 或 ${not true}<br>
    <hr>
    算术运算
    ${ 12 + 12} <br>
    ${ 12 - 12} <br>
    ${ 12 * 12} <br>
    ${ 12 / 12} 或 ${12 div 12}<br>
    ${ 12 % 12} 或 ${12 mod 12}<br>
.运算和[]括号运算
  • . 运算可以输出bean对象中属性的值
  • []运算可以输出有序集合中某个元素的值 ,还可以输出map集合中带有特殊字符串key
    <%

        Map<String, Object> map = new HashMap<>();
        map.put("a.a.a", "aaaValue");
        map.put("b-b-b", "bbbValue");
        request.setAttribute("map", map);

    %>

    <%--[]用来输出带有特殊字符的--%>
    ${map[a.a.a]}


EL表达式11个隐含对象

在这里插入图片描述
在这里插入图片描述

  • EL获取四个特定域属性
    在这里插入图片描述
    <%

        // empty 可以判断值是否为空
        // 1、值为null时为空
            request.setAttribute("key1", "value1");


        // 2、值为空串的时候为空
            request.setAttribute("key2", "value2");
        // 3、值为Object类型数组长度为0
            request.setAttribute("key3", "value3");
        // 4、list集合,元素个数为0
        List<String> list = new ArrayList<>();
        request.setAttribute("emptyList", list);
        // 5、map集合,元素个数为0
        Map<String, Object> map = new HashMap<>();
        request.setAttribute("emptyMap", map);

    %>
    ${empty key1} <br>
    ${empty key2} <br>
    ${empty key3} <br>
    ${empty emptyList} <br>
    ${empty emptyMap} <br>

    三元运算
    ${12 == 12 ? "小狗" : "小凹沟"}
  • pageContext对象的使用
    在这里插入图片描述
<%--
    <%= request.getScheme() %>  获取请求的ip协议
    <%= request.getServerName() %>  获取请求服务的的ip域名
    <%= request.getServerPort() %>  获取请求服务器的端口号
    <%= request.getContextPath() %>  获取当前工作路径
    <%= request.getMethod() %>  获取请求方式(POST/GET)
    <%= request.getRemoteHost() %>  获取客户端的ip地址
    <%= session.getId() %>  获取会话id
--%>

    1、协议:${pageContext.request.scheme} <br>
    2、服务器ip:${pageContext.request.serverName} <br>
    3、服务器端口:${pageContext.request.serverPort} <br>
    4、获取工程路径:${pageContext.request.contextPath} <br>
    5、获取请求方式:${pageContext.request.method} <br>
    6、获取客户端ip地址:${pageContext.request.remoteHost} <br>
    7、获取会话id编号:${pageContext.session.id} <br>

    <hr>

    <%--简化代码操作--%>
    <%
        pageContext.setAttribute("req", request);
    %>
1、协议:${req.scheme} <br>
2、服务器ip:${req.serverName} <br>
3、服务器端口:${req.serverPort} <br>
4、获取工程路径:${req.contextPath} <br>
5、获取请求方式:${req.method} <br>
6、获取客户端ip地址:${req.remoteHost} <br>
7、获取会话id编号:${pageContext.session.id} <br>
  • EL表达式其它隐含对象的使用

    获取请求参数单个属性值:${ param.username } <br>
    获取多个属性的某个值:${paramValues.hobby[0]} <br>

    <hr>
    获取请求头
    ${header['User-Agent']} <br>
    获取多个请求头一个${headerValues['User-Agent'][0]} <br>
    <hr>

    获取Cookie的名称:${ cookie.JSESSIONID.name} <br>
    获取Cookie的值:${ cookie.JSESSIONID.value } <br>
JSTL标签库
  • JSTL标签库全称是指 JSP Standard Tag Library JSP标准的标签库
  • EL表达式主要是为了替换jsp中的脚本表达式,而标签库则是为了替换脚本代码,这样使得整个jsp页面更加整洁
    在这里插入图片描述
JSTL标签库使用步骤
  • 先导入JSTL标签库jar包
  • 使用taglib指令引入标签库
core核心库的使用
<%--    scope 属性表示设置到哪个域
    page表示pageContext域
    request表示Request域
    session表示Session域
    application表示ServletContext域
    var设置属性值key为多少
    value设置属性值--%>

    保存之前:${requestScope.abc} <br>
    <c:set scope="page" var="abc" value=""></c:set>
    保存之后:${requestScope.abc} <br>

    <hr>
    <%--test属性表示判断的条件--%>


    <c:if test="${12 == 12}">
        <h1>12等于12</h1>
    </c:if>

    <hr>
<%--
    多路选择,和switch标签作用类似
    choose标签表示选择判断
    when标签表示每一种判断情况
    test标签表示当前这种判断情况
    注意事项:
       1、标签里不能使用html注释
       2、when标签负标签一定时父标签
       3、标签内部可以嵌套

    --%>
    <%
        request.setAttribute("height", 179);
    %>
    <c:choose>
        <c:when test="${requestScope.height > 170}">
            <h1>小巨人</h1>
        </c:when>
        <c:when test="${requestScope.height < 18}">
            <h1>小安人</h1>
        </c:when>
        <c:otherwise>
            <h1>default</h1>
        </c:otherwise>
    </c:choose>


<%--    遍历:
     begin:设置属性开始的索引
     end:设置属性结束的索引
     var:表示循环的变量(也是当前正在遍历的数据)--%>

    <c:forEach begin="1" end="10" var="i">
        ${ i }
    </c:forEach>
    <hr>

   <%-- 遍历Object类型数组--%>

    <%
        request.setAttribute("arr", new String[]{"123", "345"});
    %>
    <c:forEach items="${ requestScope.arr }" var="item">
        ${item} <br>
    </c:forEach>

    遍历map集合
    <%
        Map<String, String> map = new HashMap<>();
        map.put("1", "下流");
        map.put("2", "小镇的");
        request.setAttribute("map", map);
    %>

    <c:forEach items="${requestScope.map}" var="entry">
        ${entry} <br> <%--输出键值对--%>
        ${entry.key} <br>
        ${entry.value} <br>
    </c:forEach>

    <hr>
    <%--遍历list集合,存储自定义类型数据--%>

    <%
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(new Student(i, "wzl", "123", 12, "haode"));
        }
        //将数据保存到域中
        request.setAttribute("list", list);

    %>

    <c:forEach items="${requestScope.list}" var="stu">
        ${stu} <br>
    </c:forEach>

    <%--
        优化案例:
        begin:表示遍历的开始索引值
        items:表示遍历的集合
        var:表示遍历到的数据
        end:表示结束的索引值
        step:表示遍历的步长
        --%>
<c:forEach begin="2" end="8" step="2" items="${requestScope.list}" var="stu">
    ${stu} <br>
</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值