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返回true。empty还可以与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+/

EL表达式、JSTL的更多相关文章

  1. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  2. EL表达式,JSTL:jsp standard Tag Library

    1.EL表达式的作用: 1.1访问Bean的属性.  方式一:${对象名 . 属性名} eg:${user.name}    方式二:${对象名["属性名"]} 1.2输出简单的运 ...

  3. EL表达式 JSTL中的常用EL函数 动态数据的国际化

    ELppt: EL 全名为Expression Language.EL主要作用: 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.( ...

  4. JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象

    Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...

  5. EL表达式+JSTL

    一. EL表达式 1.1 什么是EL EL是JSP表达式语言,全称是Expression Language,提供了JSP中简化表达式的方法. 1.2 如何学习EL 没有EL的时候 怎么写 用EL表达式 ...

  6. EL表达式JSTL

    EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据. 语法:${隐式对象名称}:获得对象的引用 序号 隐含对象名称 描       ...

  7. jsp之el表达式jstl标签

    不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...

  8. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  9. 2.EL表达式&JSTL标签库常用方法

    1.EL表达式 Expression Language表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出. 格式为${表达式} EL表达式输出Bean的普通属性.数组属性.Li ...

  10. 利用EL表达式+JSTL在客户端取得数据 示例

    <%@page import="cn.gbx.domain.Address"%> <%@page import="cn.gbx.domain.User& ...

随机推荐

  1. Android SDK update被墙

    1.输入命令:$ sudo gedit /etc/hosts 2.在打开的 /etc/hosts 在文件的末尾添加下面一句:74.125.237.1 dl-ssl.google.com

  2. SGU 321 知道了双端队列,

    思路: 贪心. 每次删除最上面的边.. #include<utility> #include<iostream> #include<vector> #include ...

  3. 深入分析JavaWeb Item13 -- jsp指令具体解释

    一.JSP指令简单介绍 JSP指令(directive)是为JSP引擎而设计的.它们并不直接产生不论什么可见输出,而仅仅是告诉引擎怎样处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指 ...

  4. flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方式

    做Web开发一般是flex与JS交互,UnityWebPlayer与JS交互. 它们之间相互调用比較常见. /** * Flex调用Javascript函数 * @params functionNam ...

  5. 2016/04/29 smarty模板 1, 初步 目标 : 变量 运算符 表达式 流程控制 函数

    ① 从配置文件中读取配置: 1,在模板页面加载配置文件 html页面 不是php页面 <{config_load file='fo.conf'}> 2,在需要用到配置的地方加 <{# ...

  6. webService和RMI

    1.请求: servlet:提供了请求/响应模式,是JAVA的一种规范,只能使用于java上,用来替代早期使用的难懂的CGI,是一种无状态的请求响应,客户端访问一个服务器的url,只需要发送简单的ht ...

  7. Java反射的基本应用

    反射机制,程序在运行时加载新的类,使程序更加灵活 public class HelooReflect { public static void main(String[] args) { // 获取类 ...

  8. YTU 2955: A改错题--销售部的打印机

    2955: A改错题--销售部的打印机 时间限制: 1 Sec  内存限制: 128 MB 提交: 61  解决: 47 题目描述 销售部新进了一台快速打印机,使用频率很高.为了能够对打印情况进行统计 ...

  9. 7-39 Math对象

    7-39 Math对象 学习要点 掌握常用的数学计算方法 温馨提示:关于学习方法的建议 不要强求自己讲参考手册上所以的属性和方法都搞清楚,原因如下: 有些属性和方法非常生僻,很少用,甚至经过一段时间后 ...

  10. 强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]

    基本知识讲解 1)两种状态 DataGrid的单元格的状态有两类,即编辑状态和非编辑状态. 在实际开发中,如果一个单元格所在的列不设为只读的话(即要求可读写),那么这个单元格就存在这两种状态.按需要, ...