zoukankan      html  css  js  c++  java
  • JAVA Web基础6-EL表达式与JSTL标签库

    一.EL表达式语言
    1.EL表达式全称expression language,用于在JSP页面获取其内置对象的内容
    语法:${...}
    在jsp中page指令有一个属性是isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false,即不忽略
    2.用法说明
    常规写法举例:<%= request.getAttribute("test")>
    EL表达式写法:${test}//当作用域属性名都是唯一时可以这么写
                ${requestScope.test}//表示获取请求作用域中属性名为test的值
                ${requsetScope["test"]}
    .与[]的写法多数情况下可以通用,但下列几种情况只能用[]的写法:
    当表达式中有特殊字符如test_name则只能用[]的写法;
    当需要获取动态属性时则只能用[]的写法,即[]中可以写变量名;
    []也可以用来表示数组或者集合中的索引值,如arr的值为{a,b,c},可以通过${arr[0]}的方式获取a;
    3.EL变量
    ${test}
    当前面不指定哪个作用域下面的值的时候, 会默认按照下面的顺序去找, 如果都找不到, 就输出一个空字符串
    pageScope --> requestScope --> sessionScope --> applicationScope
    4.EL中可以对获取的值自动进行类型转换
    如获取的test1和test2中的值为字符串型数值,可以直接进行运算:${test1 + test2}
    5.获取请求参数
    获取请求参数可通过表单或超链接方式获取
    常规写法:<%= request.getParameter("name")>
    EL表达式写法:${param.name}
    6.EL运算符
    算术运算符: +   -   *   /或div   %或mod    例:${5 div 3 } 或${5 / 3 }
    关系运算符: ==或eq(equals)   !=或ne(not equals)   <或lt(less than)   >或gt(great then)   <=或le(less equals)   >=或ge(great equals)
    逻辑运算符: &&或and   ||或or   !或not
    验证运算符: empty(empty 对于 null和"" 的判断都是返回true)
    例:使用验证运算符实现当变量test的值为空时,输出"test为空",否则输出test值
    ${empty test?"test为空":test}
    二.JSTL标签库应用
    JSTL全称JSP Standard Tag Library(标准标签库),由五个功能不同的标签库组成,分别是核心标签库、格式标签库、SQL标签库、XML标签库、函数标签库。

    标签库的使用需要引入两个jar包:jstl.jar和standard.jar包,将其放置在WEB-INF的lib文件夹下。
    使用这些标签库必须在JSP页面顶部使用<%@ taglib %>指令定义引用的标签库和访问前缀;由于实际项目开发中一般只应用核心标签库,所以这里主要学习核心标签库的内容。
    核心标签库的指令格式为:<%@ taglib uri="http ://java.sun.com/jsp/jstl/core" prefix="c" %> 这里将前缀定义为c是约定俗称的。
    核心标签库里主要包括表达式标签、流程控制标签、循环标签。
    1.表达式标签
    <c: out /> 或<c: out></c:out>;输出标签
    格式:
    <c: out value="" default="" escapeXml="ture/false"/>
    相当于<%= 表达式%>,分为有标签体和没有标签体,功能一样;
    value:可以直接赋值常量,也可以赋值EL表达式:value="${test}" ;该标签会将引号里的值输出;
    default:默认输出值,当value值为null时输出此值,如果也不定义默认值则输出空字符串;
    escapeXml:控制转义字符;默认为true;也就是默认情况下如果值里有标签存在则视为字符串;


    <c: set/>或<c: set></c: set>;变量设置标签
    格式
    <c: set var="" value="" scope="">
    var:指定变量名;
    value:指定变量值;可以为EL;也可以写在标签体中如:<c:set var="t" value="小明" />或<c:set var="t1">小明</c:set>
    scope:指定变量作用域;默认为page,可选值包括:page,request,response,application;


    <:c remove/>;变量移除标签
    格式:
    <c: remove var="" scope=""/>
    var:指定要移除的变量名
    scope:指定要移除的变量有效范围,当不同范围的变量名有重复的时候, 可以通过这个属性来确定移除的是哪个, 如果不指定, 则全部移除掉,默认值为page;


    <c: catch></c: catch>;捕获异常标签
    格式:
    <c: catch var="">
        可能存在异常的代码:${5 / 0}
    </c: catch>
    var:指定存储异常信息的变量,如不保存,可省略了;类似于try...catch;上述代码会输出Infinity(无限大),属于EL表达式里的异常;
    2.流程控制标签
    <c:if></c:if>条件判断标签
    格式:
    <c:if var ="" test="" scope="">
        标签体
    </c:if>
    var:指定判断结果的变量名;
    test:必选属性,指定条件表达式,可以用EL,返回值为true或false,当为true时,执行标签体,标签体里可以为任何JSP能够使用的元素;
    scope:指定变量的有效范围;


    <c:choose></c:choose>;条件选择标签
    一般与<c:when></c:when>条件测试标签和<c:otherwise></c:otherwise>其他条件标签组合使用,类似于switch...case语句
    格式:
    <c:choose>
        <c:when test="">
            <c:out value=""></c:out>//或其他标签体
        </c:when>
        <c:otherwise>//可不写
            <c:out value=""></c:out>
        </c:otherwise>
    </c:choose>
    3.循环标签
    <c:forEach></c:forEach>循环标签
    用于遍历集合或数组中的所有或部分数据
    格式:
    <c: forEach  items = "" var = "list" begin="" end="" step="" varStatus="vs" >
        ${list} ${vs.index} ${vs.count} ${vs.first} ${vs.last}
    </c:forEach>
    items: 指定需要遍历的数组或者集合
    var: 设定一个变量名来存储从数组或者集合中遍历出来的值
    begin, end: 指定需要遍历的开始, 结束位置,默认全部遍历
    step: 每次遍历跳过的个数, 默认值为1
    varStatus:指定循环状态变量
    index:在原集合中的索引值, 从0开始
    count:当前循环计数,从1开始,
    first:是否是当前循环第一个
    last:是否是当前循环最后一个
    注意first和last, 是判断的是否在输出结果中的第一个或者最后一个, 并不是原来的集合中
    例:输出1到10之间所有整数
    <c:forEach var ="i" begin="1" end= "10">
        ${i},
    </c:forEach>


    <c: forTokens></c: forTokens>迭代标签
    用于使用指定分隔符分割字符串,并遍历分割后的字符串数组;
    格式:
    <c:forTokens items="" delims="" var=""></c:forTokens>
    items:指定要迭代的String对象
    delims:指定分隔符,可以同时有多个如:delims=", ; : "
    var:指定变量名,保存分割后的字符串
    其他属性用法同forEach标签

  • 相关阅读:
    git操作工作流
    http请求发生了两次(options请求)
    npm dose not support Node.js v10.15.3
    数据双向绑定页面无反应(angularjs)
    table样式的下拉框(angularjs)
    vue-router做路由拦截时陷入死循环
    js前台调用lodop打印
    vuejs2.0的生命周期解读
    Promise的一些相关讲解
    JAVA net 笔记
  • 原文地址:https://www.cnblogs.com/wyc1991/p/9131415.html
Copyright © 2011-2022 走看看