JSP中的EL表达式和JSTL标签库

2 篇文章 0 订阅
1 篇文章 0 订阅

JSP中的EL表达式和JSTL标签库


一丶EL表达式


    EL表达式概念
        在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要些许多Java代码,这样会使得JSP页面混乱,难以维护,因此,在JSP2.0规范提供了EL表达式.EL(Expression Language),它是一种简单的数据访问语言.

    什么是EL
        EL目的是使JSP写起来更加的简单,表达式语言灵感来源于ECMAScript和XPath表达式语言,它让JSP的代码更加简便.
    EL语法:${表达式}
    EL的使用
        内置对象:
                    ①作用域
                        内置对象名称:pageScope ,page作用域
                        内置对象名称:requestScope ,request作用域
                        内置对象名称:sessionScope ,session作用域
                        内置对象名称:applicationScope ,application作用域(servletContext)
                    ②请求参数
                        param:获得一个参数
                        paramValues:获取一组参数
                    ③请求头
                        header:获得一个请求头
                        headerValues:获取一组请求头
                    ④JSP上下文对象
                        pageContext
                    ⑤全局初始化参数
                        initParam
                    ⑥cookie
                        cookie
    EL的使用
        EL的使用:获取数据
            ①自定义的数据,必须放在作用域中

代码描述:
①获得字符串
    <!--设置传入不同域中的参数-->
                <%
pageContext.setAttribute("name", "pname");
request.setAttribute("name", "rname");
session.setAttribute("name", "sname");
application.setAttribute("name", "aname");
%>
<!-- 获取 -->
<h2>获取不同域中数据:</h2>
${pageScope.name }<br/>
${requestScope.name }<br/>
${sessionScope.name }<br/>
${applicationScope.name }

显示效果:
这里写图片描述

            ②获得数组
<h2>获取数组</h2>
<%
String[] str2 = {"abc","cde","fgh","hij"};
pageContext.setAttribute("str22", str2);
%>
${str22 }<br/>
${str22[2] }

显示效果:
这里写图片描述

            ③获得List数据
<h2>获取List集合</h2>
<%
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
pageContext.setAttribute("list1", list);
%>
${list1 }<br/>
${list1[2] }

显示效果:
这里写图片描述

            ④获得Map<String,String>数据
<%
        Map<String,String> map = new HashMap<String,String>();
        map.put("demo01", "ok01");
        map.put("demo02", "ok02");
        map.put("demo03", "ok03");
        map.put("demo04", "ok04");
        pageContext.setAttribute("map01", map);
    %>
    ${map01}<br/>
    ${map01.demo01 }<br/>

显示效果:
这里写图片描述

            ⑤获得Map<String,User>数据
<%
        Map<String,User> map = new HashMap<String,User>();
        map.put("user01", new User("张三","123"));
        map.put("user02", new User("李四","456"));
        map.put("user03", new User("王五","789"));
        map.put("user04", new User("赵六","1234"));
        pageContext.setAttribute("map01", map);

    %>
    ${map01 }<br/>
    ${map01.user01 }<br/>
    ${map01.user02 }<br/>
    ${map01.user01.username }<br/>
    ${map01.user01.password }<br/>
    ${map01['user03'].username }

显示效果:
这里写图片描述

EL的使用:运算符
①模拟数据
<%
pageContext.setAttribute(“num1”, 10);
pageContext.setAttribute(“num2”, 20);
pageContext.setAttribute(“num3”, 30);
pageContext.setAttribute(“num4”, 40);

%>

②算数运算符
+/-/*/除(/)div/求余:%(mod)

<h2>算数运算符</h2>
    ${num1+num2 }<br/>
    ${num1-num2 }<br/>
    ${num1*num2 }<br/>
    ${num1/num2 }<br/><!-- div -->
    ${num1%num2 }<br/><!-- mod -->

显示效果:
这里写图片描述

            ③关系运算符
                大于:>(gt),小于:<(lt),等于:==(eq),大于等于:>=(ge);小于等于:<=(le)
<h2>关系运算符</h2>
    ${num1<num2 }<__________>${num1 lt num2 }<br>
    ${num1>num2 }<__________>${num1 gt num2 }<br>
    ${num1<=num2 }<__________>${num1 le num2 }<br>
    ${num1>=num2 }<__________>${num1 ge num2 }<br>
    ${num1==num2 }<__________>${num1 eq num2 }

显示效果:
这里写图片描述

            ④逻辑运算符
                与:&&,或:||,非:!

                        <h2>逻辑运算符</h2>
    ${num1<num2 && num2<num3 }<_________>${num1<num2 and num2<num3 }<br>
    ${num1<num2 || num2<num3 }<_________>${num1<num2 or num2<num3 }<br>
    ${!(num1<num2) }<_________>${not(num1<num2) }

显示效果:
这里写图片描述

            ⑤三元运算符
                ${n1 < n2 ?  "true" : "false"}
<h2>三元运算符</h2>
    ${num1>num2 ? "正确" : "错误" }

显示效果:
这里写图片描述

            ⑥empty运算符
                对象是否为null
                集合是否为null
                字符串是否为null
代码演示:

                        <%
        String str08=null;
        pageContext.setAttribute("demo01",str08 );
        pageContext.setAttribute("userrr", new User());
        Map<String,String> map02 = new HashMap<String,String>();
        map02.put("zyc", "good");
        pageContext.setAttribute("map02", map02);
      %>

        字符串:${empty domo01}<br>
        对象:${empty userrr }<br>
        集合:${empty map02 }<br>

                        <%
        String str08=null;
        pageContext.setAttribute("demo01",str08 );
        pageContext.setAttribute("userrr", new User());
        Map<String,String> map02 = new HashMap<String,String>();
        map02.put("zyc", "good");
        pageContext.setAttribute("map02", map02);
      %>

        字符串:${empty domo01}<br>
        对象:${empty userrr }<br>
        集合:${empty map02 }<br>

显示效果:
这里写图片描述

二丶JSTL标签库
概念:
       JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
        JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。

    JSTL包含的标签库
        Core http://java.sun.com/jsp/jstl/core  前缀:c

        118N http://java.sun.com/jsp/jstl/fmt 前缀:fmt

        SQL http://java.sun.com/jsp/jstl/sql  前缀:sql

        XML http://java.sun.com/jsp/jstl/xml  前缀:x

        Functions http://java.sun.com/jsp/jstl/functions  前缀:fn

    JSTL使用步骤:
        ①导包
            jstl.jar
            standard.jar
        ②引入标签库
            <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>   prefix:前缀
        ③使用格式
            <c:类型 相关参数> </c:类型>

    Core标签库

        out标签
            <c:out value="ok"></c:out> value:输出的类容
        if标签
<h2>if标签的使用</h2>
    <!-- 进行计算${3>2},然后将值存入变量v,将变量v存放进HttpSession -->
    <c:if test="${3>2 }" var="v" scope="session">
        3是大于2的.
    </c:if>
    <hr/>
    <c:set value="1" var="num" property="num"></c:set>
    <c:if test="${num==1 }">
        this is first login!!!
    </c:if>
    <hr/>
    <%
        User user = new User("张三","23");
        pageContext.setAttribute("user", user);
    %>
    <c:if test="${empty user }">
        您好没有登录,请登录!!!
    </c:if>

    <c:if test="${not empty user }">
        ${user.username },欢迎您!!!
    </c:if>

显示效果:
这里写图片描述

test属性用于设置逻辑表达式;

var属性用于指定逻辑表达式中变量的名字;
scope属性用于指定var变量的作用范围,默认为page.
如果test的结果为true,那么标签将被执行,否则不执行

forEach标签:

<h2>foreach标签的使用</h2>
    <%
        int num = 10;
        pageContext.setAttribute("num", num);
    %>
    <!-- begin="${num }" end="100" 从10到100 每个只赋给V,step="20"循环遍历是每次增加20个数,
    varStatus="status"状态码可以看变化的次数等  -->
    <c:forEach  begin="${num }" end="100" var="v" step="20" varStatus="status">
        ${status.count } &nbsp;&nbsp;&nbsp;&nbsp; ${status.first } &nbsp;&nbsp;&nbsp;&nbsp; ${status.last } &nbsp;&nbsp;&nbsp;&nbsp; ${v }<br/> 
    </c:forEach>

显示效果:
这里写图片描述
var属性用于指将当前迭代到的元素保存到page域中的名称;
items属性用于指定将迭代的对象;
varStatus属性用于指定当前迭代状态信息的对象保存到page域中的名称;
varStatus属性包含的相关状态:count表示元素在集合中的序号,从1开始累加,
index表示当前元素在集合中的索引,从0开始,
first表示当前是否为集合的第一个元素,
last表示当前是否为集合的最后一个元素,
begin属性指定从第几个元素开始迭代;
end属性指迭代到对应的值;
step属性用于指定迭代的步长,就是每次增加的数量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值