JavaWeb-EL表达式

  1. EL表达式
    1. EL:Expression Language的缩写,表达式语言。
    2. 语法:${标识符}
    3. 作用:替换掉JSP中的java表达式<%=%>
    4. 如何获取数据
      1. 从域中获取数据,并把数据显示在页面上。没找到返回"",不会出现控制指针异常。
        1. 例如pageContext.setAttribute("p",person);       ${p.name}       
          1. 这个EL表达式相当于:
          2. Java:
          3. Person p = pageContext.findAttribute("p"); 
          4. out.write(p.getName());
          5. 注意p的域对象是哪个, EL会调用pageContext.findAttribute(标识符).分别从四个域(page.、request、session、application)查找标识符对应的对象,找到则返回对象,找不到则返回空字符串"".例如:${user}
      2. “.”点运算符
        1. 调用getter方法。例如${p.name},相当于调用了getter方法getName。
      3. []运算符
        1. .运算符能做的,它都能做。${p.name}=${p['name']}=${p["name"]}
        2. .运算符不能做的,它也能做(能做不符合java命名规范的数值的获取)。
          1. 例如:${list[0]}、
          2. ${header['Accept-Encoding']}这里面的0和-都是不符合java命名规范的,点运算符不能做。
          3. ${map.key}  : 获得map集合中指定key的值
    5. 执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,
      1. EL表达式中的运算符
        1. ${user == null}
        2. ${5/3}结果为1.${5%3}结果为2
      2. empty:
        1. 能判断表达式是否是null或者""字符串(不会忽略首尾空格)。是的话返回true。
        2. 一个数组、集合,没有元素,${empty list}结果仍然为true。能判断这个集合是否有无元素。
      3. 三元表达式
        1. 格式:返回布尔类型的表达式?真时执行:假时执行
    6. 获取web开发常用对象
      1. EL表达式定意义了一些隐式对象,利用这些隐式对象,就可以获得这些对象中的数据
        1. 语法:${隐式对象名称}  :获得对象的引用
        2. EL中的11个隐式对象
          1.  pageContext:代表javax.servlet.jsp.PageContext对象本身   其余10个都是代表Map类型
            1. 方法:例如${pageContext.request},就是 pageContext 调用了getRequest()方法,点代表get。
            2. 还可以继续${pageContext.request.contextPath} 获得当前应用的路径,例如结果为/day09,动态获取了当前应用的上下文。
          2. pageScope:代表的是一个Map。页面范围的域对象中的Map
            •     <%
            •     pageContext.setAttribute("user","page");
            •     %>
            •     ${user}==${pageScope.user}<br/>
            •     <%
            •     session.setAttribute("user","session");
            •     %>
            •     ${user}==${sessionScope.user}
          3. requestScope:代表request域中用于保存属性的Map对象
          4. sessionScope:代表session域中用于保存属性的Map对象
          5. applicationScope:代表application域中用于保存属性的Map对象
          6. param:代表的是一个Map。(适合用于单一请求参数)请求参数的Map  key:请求参数名   value:请求参数值String
            1. <!-- http://localhost:8080/day09/el/3.jsp?username=abc -->,这样获得单一请求参数:${param.username}
          7. paramValues: 代表的是一个Map。(适合用于重名的请求参数)请求参数的Map key:请求参数名 value:请求参数值数组String[]
            1. <!-- http://localhost:8080/day09/el/3.jsp?username=abc&username=def -->
            2.      ${paramValues.username[0]}<br/>
            3.      ${paramValues.username[1]}<br/>
          8. header:代表的是一个Map。(适合用于单一请求头)请求头的Map  key:请求头名   value:请求头值String
            1. ${header['Accept-Encoding']}
          9. headerValues: 代表的是一个Map。(适合用于重名的请求头)请求头的Map key:请求头名 value:请求头值数组String[]
            1. ${headerValues['Accept-Encoding'][0]}
          10. cookie:代表也是一个Map。key:cookie的name;value:cookie对象本身
            1. ${cookie.JSESSIONID.value}
            2.  
            3. 要打出cookie的JSESSION的id,过程是先获得cookie对象本身,cookie.JSESSION.value( cookie.JSESSION 是cookie的key,指向的是对象本身,想要得到),
          11. initParam:代表一个Map。key:参数名 value:参数值String(web.xml--所有web应用全局参数)
            1. ${initParam.encoding}
        3. 注意:使用隐式对象的范围,例如name存在于sessionScope中,不能放在requestScope中。
    7. 调用Java方法
      1. EL表达式允许用户开发自定义EL函数,用于JSP页面中通过EL调用Java类的方法。
        1. 例如:编写一个类:定义一个静态方法
          • package com.itheima.functions;

          • public class StringUtil {
          • public static String toUpperCase(String str){
          • return str.toUpperCase();
          • }
          • public static String connect(String s1,String s2){
          • return s1+s2;
          • }
          • }
        2. 在WEB-INF目录下建立一个扩展名为tld(Tag Libary Defination)的xml文件。(EL函数与具体类的方法进行一个映射)
          • (参考Tomcat中的例子)
          • <?xml version="1.0" encoding="UTF-8"?>
          • <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          • xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
          • version="2.0">
          • <tlib-version>1.0</tlib-version>
          • <short-name>myfn</short-name>
          • <uri>http://www.itheima.com/jsp/functions</uri>
          • <function>
          • <description>Converts the string to uppercase</description>
          • <name>toUpperCase</name>
          • <function-class>com.itheima.functions.StringUtil</function-class>
          • <function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
          • </function>
          • <function>
          • <name>connect</name>
          • <function-class>com.itheima.functions.StringUtil</function-class>
          • <function-signature>java.lang.String connect( java.lang.String,java.lang.String )</function-signature>
          • </function>
          • </taglib>
        3. 在web.xml中将tld的实际存放路径与tld中的uri进行绑定(可选的:前提是你把tld文件放到了WEB-INF目录下)
          •  <jsp-config>
          • <taglib>
          • <taglib-uri>http://www.itheima.com/jsp/functions</taglib-uri>
          • <taglib-location>/WEB-INF/myfn.tld</taglib-location>
          • </taglib>
          •  </jsp-config>
        4. 在JSP中使用自定义的函数
          1. 使用前:通过taglib指令,引入
          2. Tip:
          3. SUN提供的标准的EL函数。全都是与String有关
          4. 属于JSTL的一部分:(Java Standard Tag Libary)
          5. core:核心
          6. fmt:格式化
          7. xml:操作xml
          8. sql:操作数据库
          9. functions:EL函数

          10. 前提:使用JSTL,导入jar包:jstl.jar  standard.jar
  2. JSTL中的Core标签:c:if c:forEach
    1. 1、c:if:如同java中的if
      1. 属性:
        • test:必须的。要求返回值是boolean的表达式(EL或Java表达式)。如果为true,则主体内容显示
        • var:存放结果的变量名
        • scope:存放结果的域范围。默认是page。
    2. 2、c:forEach:循环遍历(重复执行主体内容)
      1. 属性:
        1. items:要遍历的对象。数组、List、Set、Map、Enumeration等
        2. begin:遍历的items如果有的话,代表索开始引号
        3. end:遍历的items如果有的话,代表索结束引号
        4. var:存放结果的变量名
        5. step:步长
        6. varStatus:指定一个变量,该变量引用一个对象
          • 该对象有以下方法:
          • getIndex():返回当前遍历的元素的索引
          • getCount():返回当前遍历的元素的索引+1
          • isFirst():返回当前遍历的元素是不是第一个
          • isLast():返回当前遍历的元素是不是最后一个
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值