zoukankan      html  css  js  c++  java
  • EL表达式、JSTL

    EL表达式

    一、简介      

            > JSP表达式 <%= %> 用于向页面中输出一个对象。
            > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段。
            > 使用EL表达式来代替JSP表达式 ,使用JSTL标签来代替JSP脚本片段。
            
            > EL表达式用来向页面输出内容,仅仅对四个域起作用!而且仅仅可以 在jsp中使用,在html中不可以使用!
            
            getAttribute();//四个域对象都可以使用//作用不是接收请求参数,在使用getAttribute方法之前必须先使用setAttribute()将属性对方法域对象中;返回Object类型!
            
            getParameter()://仅仅是request使用!用于接收请求参数【url,form表单中】;返回值String类型


    二、 基本语法

            > ${表达式}
            > EL表达式可以从域中获取属性。
                 - 使用 ${属性名}
                 - 如果只填写一个属性名,EL表达式会自动做全域查找。
                
                 - 所谓的全域查找,就是按照pageScope requestScope sessionScope  applicationScope四个域范围内分别,找到就返回属性,如果没找到什么都不返还。
                
                 - 我们还可以指定去哪个域查找
                    pageScope
                    requestScope
                    sessionScope
                    applicationScope
                    
                - 例子:
                    查找request中属性
                        ${requestScope.属性名}
                    查找session中的属性
                        ${sessionScope.属性名}
                
                - 注意:1、EL表达式只能获取域中的属性, EL表达式不能直接调用对象的方法

                  2、EL表达式和JSTL标签仅可以在jsp中使用,EL表达式是仅针对Jsp的四大作用域对象中的内容进行操作的。
                   
                - 通过EL表达式读取对象的属性时,只需要${对象.属性名}
                    EL表达式会自动调用对象的对应的getter方法,通过将属性名首字母大写,然后加上一个get
                    
                    注意:只要有属性,就可以一直点下去,也就说对象的属性是对象的话,我们也可以通过对象的属性的属性的方式调用!
                    
                - 当读取一些名字比较特殊的属性时,这种特殊值必须要指定域,例如属性名带-:
                    ${requestScope['属性名']}

    三、 隐含对象

                > EL中一共有11个内置对象。
                    - pageContext
                        类型 PageContext
                            它和JSP中pageContext是一个东西
                        作用 可以获取到JSP中其他的隐含对象
                        
                        例如:可以获取项目名:
                            ${pageContext.request.contextPath }
                            可以做为base标签的href属性值
                        <base
                           href="http://${pageContext.request.request.serverName}:
                         ${pageContext.request.serverPort}$
                           {pageContext.request.contextPath}/"/>
                    
                    - pageScope
                        类型:Map<String,Object>
                        代表:page域中的属性
                        作用:可以获取到page域中的属性
                        
                    - requestScope
                        类型:Map<String,Object>
                        代表:request域中的属性
                        作用:可以获取到request域中的属性
                        
                    - sessionScope
                        类型:Map<String,Object>
                        代表:session域中的属性
                        作用:可以获取到session域中的属性
                    
                    - applicatScope
                        类型:Map<String,Object>
                        代表:application域中的属性
                        作用:可以获取到application域中的属性
                        
                        
                    - param
                        类型: Map<String , String>
                        代表:用户发送的请求参数
                        作用:可以获取请求参数
                        用法: ${param.参数名}
                        
                    - paramValues
                        类型:Map<String , String[]>
                        代表:一个请求参数对应的多个值
                        用法: ${paramValues.参数名[索引]}
                        
                    - header
                        作用:可以获取到用户发送的请求头
                        类型:Map<String , String>
                        例如:获取用户的系统信息 ${header['User-Agent']}
                        
                ?    - headerValues
                        类型: Map<String , String[]>
                        作用:可以获取一个头的多个值
                
                ?    - initParam;
                        类型:Map<String , String>
                        作用:获取整个WEB应用的初始化参数
                
                ?    - cookie
                        类型:Map<String , Cookie>
                        作用:用来获取Cookie

     四、 运算

            > 在EL中可以直接使用运算符进行运算。
            > 在EL中可以使用Empty元素符:
                如果值为null , empty则返回 true
                如果为空串, 则返回 true
                空的集合    返回true

            > 所以empty元素符经常用来判断集合或者字符串是否为空

          

    运算符

    说明

    范例

    结果

    +

    ${17+5}

    22

    -

    ${17-5}

    12

    *

    ${17*5}

    85

    /div

    ${17/5}${17 div 5}

    3

    %mod

    取余

    ${17%5}${17 mod 5}

    2

    ==eq

    等于

    ${5==5}${5 eq 5}

    true

    !=ne

    不等于

    ${5!=5}${5 ne 5}

    false

    <lt

    小于

    ${3<5}${3 lt 5}

    true

    >gt

    大于

    ${3>5}${3 gt 5}

    false

    <=le

    小于等于

    ${3<=5}${3 le 5}

    true

    >=ge

    大于等于

    ${3>=5}${3 ge 5}

    false

    &&and

    并且

    ${true&&false}${true and false}

    false

    !not

    ${!true}${not true}

    false

    ||or

    或者

    ${true||false}${true or false}

    true

    empty

    是否为空

    ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回trueempty还可以与not!一起使用。${not empty “”}

    true

    JSTL(JSP Standard Tag Library)

    一、 JSTL简介

            > JSTL是JSP的标准标签库
            
            > JSTL为我们提供了一些常用的标签,供我们日常开发使用(if 、 if...else 、遍历 、 日期格式化)
            
            > 标签库
                - core :核心标签库
                    - 最常用的一个标签库,也就是我们熟悉c标签。
                  URI:http://java.sun.com/jsp/jstl/core

     
                - fn :函数标签库
                    - 函数标签库它需要结合EL表达式使用,主要定义了一些字符串操作的方法。

           URI:http://java.sun.com/jsp/jstl/functions
             
                - fmt :格式化标签库
                    - 主要用来做日期、数字的格式化以及国际化
                    - 20151019 2015/10/19  10/19/2015
                    - 10000 10,000

     URI:http://java.sun.com/jsp/jstl/fmt


                - sql : 数据库标签库    
                    - 主要用来在JSP中操作数据库的,已淘汰

         URI:http://java.sun.com/jsp/jstl/sql


                
                - xml : xml标签库    
                    - 主要用来在JSP操作解析XML文档,已淘汰
               URI:http://java.sun.com/jsp/jstl/xml


            > JSTL的使用
                使用JSTL需要先导入两个jar包
                    taglibs-standard-impl-1.2.1.jar
                    taglibs-standard-spec-1.2.1.jar


    二、 核心标签库    

             - 导入核心标签库
                <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
                
             - 核心标签库一般使用c作为前缀,所以我们也称核心标签库为c标签。
             - c标签是我们JSTL中最常用的一个标签库,它里边封装了很多开发中常用的功能。
            
             c:out
             作用:向页面中输入一个内容,一般要结合EL表达式使用!
             例子:<c:out value="" default="" escapeXml=""></c:out>
             属性:
                value : 要输出内容
                default : 当内容为空时显示的默认值

         <%
            request.setAttribute("code", "<script>alert('hha')</script>");
        %>
        <c:out value="${ds }" default="加载失败"></c:out>


                escapeXml : 是否自动转义特殊字符,默认值为true 自动转义,一般不修改该属性
            
            c:set
            作用:向域中设置一个属性
            例子:<c:set var="name" value="孙悟空" scope="request"></c:set>
            属性:
                var :向域中存储的属性名
                value :向域中存储的属性值
                scope :向那个域中添加属性,四个可选值(page request session application),默认是page
            
            c:remove
            作用:移除域中的一个属性
            例子:<c:remove var="name" scope="session"/>
            属性:
                var :要移除的属性的名字
                scope :要移除的属性所在的域,四个可选值(page request session application)
                    如果不设置该属性,则默认移除四个域中指定属性。
            
            c:if
            作用 :相当于java中if语句
            例子:    
                <c:if test="${empty param.name }">
                    <h3>您没有输入name属性!</h3>
                </c:if>
            属性:
                test :接收一个boolean类型的值
                    如果test的值为true则标签体执行
                    否则不执行标签体
            
            c:choose c:when c:otherwise
            作用:相当于if...else
            例子:
                    <c:choose>
                        <c:when test="${param.score == 100 }">
                            <h3>恭喜您考了100分!</h3>
                        </c:when>
                        <c:otherwise>
                            <h3>恭喜你,你不及格!</h3>
                        </c:otherwise>
                    </c:choose>
            属性:
                when标签中的test属性:
                    接收一个boolean类型的值
                        如果test的值为true则标签体执行
                            否则不执行标签体
            
            注意:在choose标签中可以指定多个when标签,但是只有一个when会执行。
                    当所有的when标签都不执行时,则otherwise标签执行。
                
                c:when和c:otherwise不能脱离c:choose使用。
                
            
            c:forEach
            作用:可以在页面中对集合进行遍历
            例子:
                <c:forEach items="${list}" var="hero">
                    ${hero} <br />
                </c:forEach>
                
                <c:forEach items="${map }" var="user">
                    ${user.key} --- ${user.value} <br />
                </c:forEach>
            属性:
                items:要遍历的集合
                var:对集合中的对象引用的名字
                
                
            注意:在遍历Map时,返回的是一组一组的键值对结构
                我们可以通过对象.key获取键,通过对象.value获取值
                
            作用:可以用来遍历一组数
            例子:
                <c:forEach begin="1" end="20" var="index" step="1">
                    <a href=#>${index}</a>
                </c:forEach>
            属性:
                begin :开始的位置,注意begin不能小于0
                end :结束的位置
                var :引用的名字
                step :步长,每次自增的大小
                
            c:url
            作用:可以创建一个完整的绝对路径
            例子:
                <c:url value="/index.jsp">
                    <c:param name="name" value="孙悟空"></c:param>
                    <c:param name="age" value="18"></c:param>
                </c:url>
            属性:
                value:要设置的地址,注意该地址要以/开头,否则不会加上项目名
                 在url标签中可以添加c:param标签,可以自动为地址拼接上请求参数。
            
            c:redirect
            作用:请求的重定向
            例子:
                <c:redirect url="/index.jsp">
                    <c:param name="name" value="唐僧"></c:param>
                </c:redirect>
            属性:
                url:
                    重定向到目标地址,注意该地址不要自己添加项目名。
                    
                在redirect标签中可以添加c:param标签,可以自动为地址拼接上请求参数。
                
                注意:redirect标签会自动为我们设置项目名,不需要我们手动设置!
                
            设置绝对路径的三种方式:
            
                1.<c:set var="ctx" value="${pageContext.request.contextPath }"></c:set>
                    使用这种方式,可以通过${ctx}在页面中代替项目名
                    
                2.使用<c:url value="/index.jsp"></c:url>
                    使用url标签,它会自动为绝对路径加上项目名
                
                3.<base href="http://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/" />
                    使用base标签可以为页面中所有的相对路径,加上项目名    

    三、函数标签库    

                作用:函数标签库需要配合EL表达式使用,它里面的方法都是一些字符串的操作
                
                引入函数标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

                例子:
                    
                    ${fn:contains("hello","He") } <br /> 判断前一个字符串是否包含后一个字符串
                    
                    ${fn:containsIgnoreCase("hello","He") } <br /> 判断前一个字符串是否包含后一个字符串,不区分大小写
                    
                    ${fn:endsWith("hello","alo") }<br /> 判断前一个字符串是否以后一个字符串结尾
                    
                    <!-- 自动将特殊字符转义 -->
                    ${fn:escapeXml("<html></html>") }<br /> 自动将特殊字符进行转义
                    
                    <!-- fn:join用于将一个String数组转换一个字符串,第二个参数代表的连接符 -->
                    ${fn:join(strs,",") }<br /> 将一个String数组,以指定字符串拼接为一个新的字符串
                    
                    ${fn:split("a,b,c,d,e",",")[2] }<br /> 将一个字符串,以指定字符拆分为一个字符数组
                    
                    ${fn:trim("      abcd       ") }<br /> 去掉字符串的前后空格
                    
                   注: 剩下方法参照 alt+/
        
        


  • 相关阅读:
    优美的回文串--全国模拟(二)
    创造新世界--全国模拟(二)
    字符串分类--全国模拟(二)
    平衡数--全国模拟(二)
    最小矩形--全国模拟(二)
    组装三角形--全国模拟(二)
    深入.NET内测题
    面向对象七大设计原则
    创建数据库普通临时表和创建数据库全局变量表和俩者的区别
    使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
  • 原文地址:https://www.cnblogs.com/bkyy/p/7867844.html
Copyright © 2011-2022 走看看