• JSP(7)—EL和JSTL


    一、EL表达式:
    1.简介:EL全称为Expression Language,原本是JSTL1.0为方便存储数据所定义的语言,当时只能在JSTL标签中
    使用,到了JSTL2.0之后,EL已经成为正式纳为正式的标准规范之一,因此只要是支持Servlet2.4/JSP2.0的Container,
    就可以在网页中直接使用EL。
    2.语法:${sessionScope.user.sex},所有的EL都是以${开始,以}结尾
    3.运算符:.和[]两种运算符来存取数据,同时也可以混合使用,[]是为了解决属性名带有特殊字符,例如使用setAttribute()
    存一个属性名为com.test.web的属性名,使用.就无法获取到,使用[]就没问题。
    例如:

    ${sessionScope.user.sex} = ${sessionScope.user["sex"]}
    ${sessionScope.shoppingCart[0].price}

    4.变量范围:EL获取变量的方法很简单,例如${username},它的意思就是取出某一范围中名称为username的变量,因为没有指定具体一范围,所以它默认会从page范围找,假如找不到,一次 到Request、session、application范围,加入途中找到username就直接回传,假如全部范围找过之后没有找到返回null。

            属性范围        在EL中的名称
            Page        PageScope
            Request     RequestScope
            Session     SessionScope
            Application ApplicationScope

    获取指定某一范围的变量

    ${pageScope.username}:取出page范围内的username变量
    ${requestScope.username}:取出request范围内的username变量
    ${sessionScope.username}:取出session范围内的username变量
    ${application.username}:取出application范围内的username变量

    其中pageScope、requestScope、sessionScope、application都是EL表达式的隐含对象

    5.自动类型变换

        age:${param.age }
        <br><br>
        age:<%=request.getParameter("age") %>
        <br><br>
        对数据进行加减操作之后:
        <br><br>
        age:${param.age + 10}
        <br><br>
        age:<%=request.getParameter("age") + 10%>

    6.隐含对象

            ①与范围有关的对象
                application
                session(重要)
                request(重要)
                page。
            ②与输入有关的对象
                param(重要):获取一个请求参数
                paramValues(重要):获取一组请求参数
            ③其他对象   
                cookie
                header
                headerValues
                initParam:获取当前web应用的初始化参数
                pageContext(重要)

    7.运算符

            ①算数运算符
                +、-、*、/、%
            ②关系运算符
                ==、!=、>、>=、<、<=
                例如:${param.user == param.user1}
            ③逻辑运算符
                &&、||、!
            ④其他运算符
                empty运算符:主要用来判断值是否为空,是为true,否则为false
                条件运算符
                ()运算符
            ⑤EL函数,自定义函数
                jstl函数:
                    fn:contains(String, substring)
                    ...

    EL自定义函数:在EL表达式中调用的某个Java类的静态方法,这个静态方法需要在web应用程序中进行配置才可以被EL
    表达式调用,EL自定义函数可以扩展EL表达式的功能,让EL表达式完成普通Java程序代码所完成的功能。
    编写自定义函数的步骤:
    编写EL自定义函数映射的Java类中的静态方法,这个Java类必须带有public修饰符,方法必须是这个类的带有
    public修饰符的静态方法。
    编写标签库描述文件(tld文件),在tld文件中描述自定义函数。
    在JSP页面中导入和使用自定义函数。

    二、JSTL
    核心标签库

    1.jstl表达式

            out:显示数据内容,例如:<c:out value="${username}">
            set:将变量储存至jsp范围中或是JavaBean的属性中,<c:set value="value" var="varName" [scope="{page|request|session|application}"]>其中target、property、value属性支持EL表达式     
            remove:移除属性
            catch

    2.jstl流程控制

    if:没有else,但是可以把结果存储到域对象中
            choos、when、otherwise,可以实现if else的效果但较为麻烦,when和otherwise不能脱离choose使用
        而且when必须要在otherwise

    3.迭代操作

            forEach:为循环控制,它可以将集合中的成员循环浏览一遍,运作方式当条件符合时,就会持续重复执行<c:forEach>
        的本体内容。索引从0开始
            语法:<c:forEach [var="varName"] items="collection"[varStatus="varStatusName"][begin="begin"][end="end"][step="step"]>
                    本体内容...
                </c:forEach>
            forTokens:用来浏览一个字符串中所有成员,其成员是由定义符号所分割的
            语法:<c:forToken items="StringOfTokens" delims="delimiters"[var="varName"][varStatus="varStatusName"][begin="begin"][end="end"][step="stpe"]>
                </c:forToken>

    4.URL操作

            import:可以把其他静态页面包含至本身JSP网页,与<jsp:include>的区别在于:<jsp:include>只能包含
        和自己同一个web application下的文件,而<c:import>除了能够包含和自己同一个问application的文件之外,
        亦可以包含不同web application或者是其他网站的文件。
            语法:<c:import url="url"[context="context"][var="varName"]>
            redirect:从当前页面重定向到指定的页面,也可以是其他web application应用的页面。
            url:产生一个url地址,可以Cookie是否可用来进行智能URL重写,对GET请求的参数进行编码
    客户端请求:代表站点:${pageContext.request.contextPath }
    或者<%= request.getContextPath %> 
  • 相关阅读:
    Windows下PHP开启mcrypt扩展和SSL(OpenSSL)扩展支持
    MyBatis 学习笔记
    试用百度云计算平台
    TCP三次握手及四次挥手详细图解
    Java开发中的23种设计模式详解
    Extjs4.1.0_从入门到精通
    SQLite3命令操作大全
    带你了解 HBase 数据模型和 HBase 架构
    让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!
    论文阅读丨神经清洁: 神经网络中的后门攻击识别与缓解
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453977.html
Copyright © 2020-2023  润新知