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

    基本语法:${EL表达式}

    1.获取数据

    1)EL表达式只能获取四大域中的数据。

    2)EL表达式获取的对象如果是null,页面不会显示数据。因此,EL表达式中永远不会出现空指针异常。

    3).运算符和[]运算符

    .运算符能做的,[]运算符也能做。[]运算符能做,.运算符不一定能做。

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@page import="cn.lsl.domain.Person"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
        <jsp:useBean id="person" class="cn.lsl.domain.Person"></jsp:useBean>
        <jsp:setProperty property="name" name="person" value="lsl"/>
        ${person.name }
        <hr/>
        <%
            pageContext.setAttribute("pp","p1");
            pageContext.setAttribute("pp","p2",PageContext.SESSION_SCOPE);
            request.setAttribute("pp","p3");
            application.setAttribute("pp","p4");
         %>
         ${pp }
         <hr/>
         ${person.address.city }<br/>
         ${person.class }<br/>
         ${person['class'] }  
         <hr/>
         <!-- 获取数组中指定的元素 -->   
         <%
             String str[] = {"a","b","c"};
             pageContext.setAttribute("str",str);
          %>
         ${str[1] }
         <hr/>
         <%
             List list = new ArrayList();
             list.add("aa");
             list.add("bb");
             list.add("cc");
             pageContext.setAttribute("list",list);
         %>
         ${list[2] }
         <hr/>
         <%
             Map map = new LinkedHashMap();
             map.put("a","aaa");
             map.put("b","bbb");
             map.put("c","ccc");
             pageContext.setAttribute("mm",map);
         %>
         ${mm.b }
         <hr/>
         <%
             Map map1 = new LinkedHashMap();
             map1.put("1","aaa");
             map1.put("2","bbb");
             map1.put("3","ccc");
             pageContext.setAttribute("mm1",map1);
         %>
         ${mm1["3"] }
         <hr/>
          <%
             Map map2 = new LinkedHashMap();
             map2.put("a",new Person("lsl","男",true));
             map2.put("b",new Person("zs","女",false));
             map2.put("c",new Person("ls","女",true));
             pageContext.setAttribute("mm2",map2);
         %>
         ${mm2["a"].name }<br/>
         ${mm2["b"].name }<br/>
         ${mm2.c.name }<br/>
         
      </body>
    </html>

    2.数学逻辑运算

    empty运算符:如果判断的对象是null或者空字符串,都返回true。对于集合对象本身不是                       null,没有任何元素,也返回true。

    EL表达式不支持字符串连接操作。

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
        <jsp:useBean id="person" class="cn.lsl.domain.Person"></jsp:useBean>
        ${empty p }
        <hr/>
        <%
            List list = new ArrayList();
            list.add("aaa");
            pageContext.setAttribute("list",list);
        %>
        ${empty list }
        <hr/>
        <%
            session.setAttribute("user","lsl");
         %>
        ${empty user?"请登录":"欢迎您:" }${user }<br/>
        <hr/>
        <%
            pageContext.setAttribute("gender","0");
         %>
         ${gender == "0"?"女":"男" }
        <hr/>
      </body>
    </html>

    3.获取JSP的内置对象(11大EL内置对象)

    难点,不要与JSP的内置对象和范围名称搞混

    11大EL隐式对象中,其中一个是表示自身对象外,其余都是表示的Map结构

                     

    EL隐式对象名称                Java类型                                              备注

    pageContext                     javax.servlet.jsp.PageContext                与JSP中的内置对象完全相同

    剩余的都是代表的Map集合

    pageScope                        java.util.Map                                        代表着PageContext页面范围域那个Map

    requestScope                    java.util.Map                                        代表着ServletRequest请求范围域那个Map

    sessionScope                    java.util.Map                                        代表着HttpSession会话范围域那个Map

    applicationScope                java.util.Map                                        代表着ServletContext应用范围域那个Map

    param                               java.util.Map                                        代表着请求参数。key:请求参数的名称。value:请求参数的值,它是 一个字符串。

    paramValues                      java.util.Map                                        代表着请求参数。key:请求参数的名称。value:请求参数的值,它是 一个字符串数组。            

    header                              java.util.Map                                        代表着请求消息头。key:头名称。value:头值,它是一个字符串。

    headerValues                     java.util.Map                                        代表着请求消息头。key:头名称。 value:头值,它是一个字符串数组。

    cookie                               java.util.Map                                        代表客户端提交的Cookie的Map。key:cookie的name。value:cookie对象本身

    initParam                           java.util.Map                                        代表着全局初始化参数(web.xml中context-param).key:参数名称。value:参数值

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@page import="cn.lsl.domain.Person"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>EL的11大隐式对象</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
        <br/>-----------------pageContext内置对象-----------------<br/>
        ${pageContext }<br/>
        ${pageContext.request }<br/>
        <!-- EL表达式获取当前应用名称 -->
        ${pageContext.request.contextPath }<br/>
        <!-- EL表达式获取HttpServletResponse采用的编码 -->
        ${pageContext.response.characterEncoding }<br/>
        <br/>-----------------pageScope内置对象-----------------<br/>
        <%
            pageContext.setAttribute("pp","ppp");
            pageContext.setAttribute("p",new Person("lsl","男",false));
        %>
        ${pageScope.pp }<br/>
        ${pageScope.p.name }<br/>
        <hr/>
        <%
            pageContext.setAttribute("p1",new Person("lsl","男",false),PageContext.REQUEST_SCOPE);
        %>
        ${requestScope.p1.gender }
        <hr/>
        <%
            Person person = new Person("lsl","女",true);
            session.setAttribute("user",person);
        %>
        ${empty sessionScope.user?"请登录":"欢迎您:" }${sessionScope.user.name }
        <hr/>
        ${param.username }<br/>
        ${param.password }<br/>
        <hr/>
        <!-- http://localhost:8080/EL/3.jsp?username=abc&username=def&password=123 -->
        ${paramValues.username[0] }<br/>
        ${paramValues.username[1] }<br/>
        ${paramValues.password[0] }<br/>
        <hr/>
        ${header["accept-encoding"] }<br/>
        ${headerValues["accept-encoding"][0] }<br/>
        <hr/>
        <!-- 取JSESSIONID这个cookie的名字  -->
        ${cookie["JSESSIONID"].name }<br/>
        ${cookie.JSESSIONID.value}
        <hr/>
        ${initParam.encoding }
        <!-- 
            <context-param>
                  <param-name>encoding</param-name>
                  <param-value>UTF-8</param-value>
              </context-param>
         -->
      </body>
    </html>

    4.调用普通类的静态方法(EL函数)

    编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤):

    a、编写一个普通的java类,提供一个静态方法

    public class FunctionDemo {
            public static String toUpperCase(String str){
                return str.toUpperCase();
            }
        }

    b、在JavaWeb应用的WEB-INF目录下建立一个扩展名是tld(taglib definition)的XML文件(参考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.lsl.cn/myfn</uri>
                    <function><!-- 定义函数 -->
                        <name>toUppercase</name>
                        <function-class>cn.lsl.el.FunctionDemo</function-class>
                        <function-signature>
                            java.lang.String toUpperCase( java.lang.String )
                        </function-signature>
                    </function>
                </taglib>

    c、(可选步骤)前提是把tld文件放到了WEB-INF目录下。

    告知应用,tld文件和tld中的uri的对应。修改web.xml,增加以下内容:

     
    <jsp-config>
            <taglib>
                <taglib-uri>http://www.lsl.cn/myfn</taglib-uri>
                <taglib-location>/WEB-INF/myfn.tld</taglib-location>
            </taglib>
        </jsp-config>

    d、在JSP中使用

    用taglib指令,引入自定义的EL函数库

    <%@ taglib uri="http://www.lsl.cn/myfn" prefix="myfn"%>
        ${myfn:toUppercase(p)}

    eg:

    FunctionDemo.java

     
    package cn.lsl.el;
    public class FunctionDemo {
        public static String toUpperCase(String str){
            return str.toUpperCase();
        }
    }

    myfn.tld

     
    <?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.lsl.cn/myfn</uri>
        <function><!-- 定义函数 -->
            <name>toUppercase</name>
            <function-class>cn.lsl.el.FunctionDemo</function-class>
            <function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
        </function>
    </taglib>

    web.xml

     
    <jsp-config>
            <taglib>
                <taglib-uri>http://www.lsl.cn/myfn</taglib-uri>
                <taglib-location>/WEB-INF/myfn.tld</taglib-location>
            </taglib>
    </jsp-config>
     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.lsl.cn/myfn" prefix="myfn"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
         <%
            pageContext.setAttribute("p","abcdefg");
         %>
        ${myfn:toUppercase(p)}
      </body>
    </html>

    5.SUN提供的标准EL函数库

    JSTL标准标签

    需要导入JSTL的jar包。standard.jar jstl.jar

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
          ${fn:contains("abc","bc") }<br/>
        ${fn:substring("shit",3,100) }<br/>  ${fn:split("www.lsl.cn",".")[0]}${fn:split("www.lsl.cn",".")[1]}
    ${fn:split("www.lsl.cn",".")[2]}<br/>
        ${fn:split("2013-04/26","-/")[0]}<br/>
        ${fn:split("2013-04/26","-/")[1]}<br/>
        ${fn:split("2013-04/26","-/")[2]}<br/>
        &lt;hr/&gt;<br/>
        <%
        pageContext.setAttribute("h","<h1>haha</h1>");
        %>
        ${fn:escapeXml(h)}
      </body>
    </html>

    拓展:

    Functions标签库中常用的16个函数的用法

    1)fn:contains函数用于判断在源字符串中是否包含目标字符串,其语法为:

    fn:contains(String source,String target) -------boolean;

    2)fn:containsIgnoreCase函数用于判断在源字符串中是否包含目标字符串,并且在判断时忽略大小写,其语法为:

    fn: containsIgnoreCase (String source,String target) -------boolean;

    3)fn:startsWith函数用于判断源字符串是否以指定的目标字符串开头,其语法为:

    fn:startsWith(String source,String target) ----boolean

    4)fn: endsWith函数用于判断源字符串是否以指定的目标字符串结尾,其语法为:

    fn: endsWith (String source,String target) ----boolean

    5)fn:indexOf函数用于在源字符串中查找目标字符串,并返回源字符串中最先与目标字符串匹配的第一个字符的索引,如果在源字符串中不包含目标字符串,就返回-1,源字符串中的第一个字符的索引为0。 fn:indexOf函数的语法为:

    fn: indexOf (String source,String target) ----int

    6)fn:replace函数用于把源字符串中的一部分替换为另外的字符串,并返回替换后的字符串。fn:replace函数的语法为:

    fn: replace (String source,String before,String after) ----String

    7)fn:substring函数用于获取源字符串中的特定子字符串,它的语法为:

    fn:substring(String source,int beginIndex,int endIndex) ------String

    8)fn:substringBefore函数用于获取源字符串中指定子字符串之前的子字符串,其语法为:

    fn:substringBefore(String source,String target) ----String

    9)fn: substringAfter函数用于获取源字符串中指定子字符串之后的子字符串,其语法为:

    fn: substringAfter (String source,String target) ----String

    10)fn:split函数用于将源字符串拆分为一个字符串数组,其语法为:

    fn: split (String source,String delimiter) ----String[]

    11)fn:join函数用于将源字符串数组中的所有字符串连接为一个字符串,其语法为:

    fn:join(String source[],String separator) ----String

    12)fn:toLowerCase函数用于将源字符串中的所有字符改为小写,其语法为:

    fn:toLowerCase(String source)  -----String

    13)fn: toUpperCase函数用于将源字符串中的所有字符改为大写,其语法为:

    fn: toUpperCase (String source)  -----String

    14)fn:trim函数用于将源字符串中的开头和末尾的空格删除,其语法为:

    fn:trim(String source) ----String

    15)fn:escapeXml函数用于将源字符串中的字符“<”、“>”、“””和“&”等转换为转义字符,本书第1章的1.2节(HTML简介)介绍了转义字符的概念。fn:escapeXml函数的行为与<c:out>标签的escapeXml属性为true时的转换行为相同,fn:escapeXml函数的语法为:

    fn:escapeXml(String source) ----String

    16)fn:length函数用于返回字符串中的字符的个数,或者集合和数组的元素的个数,其语法为:

    fn:length(source) ---- int

    6. c:if

    作用:判断是否为true,如果为true,那么标签的主体内容就会显示。

    属性:

             test:必须的。要求必须是boolean的。支持表达式(EL或Java表达式)

             var:保存test运算结果的变量

             scope: 保存的域范围。默认是page

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
          <% 
              pageContext.setAttribute("result",true); 
           %>
           <c:if test="${result}">
               真的
           </c:if>
           <hr/>
           <%
            session.setAttribute("user","lsl");
         %>
         <c:if test="${sessionScope.user==null}">
             对不起!请登录
         </c:if>
         <c:if test="${sessionScope.user!=null}">
             欢迎您:${sessionScope.user }
         </c:if>
         <hr/>
         <%
            List list = new ArrayList();
            list.add("书");
            session.setAttribute("cart",list);
         %>
         <c:if test="${empty sessionScope.cart}">
             对不起!您还未曾购物
         </c:if>
         <c:if test="${!empty sessionScope.cart}">
             您购买了如下东西
         </c:if>
         <hr/>
         <c:if test="${empty sessionScope.cart}" var="result" scope="page"></c:if>
         ${result }
         
      </body>
    </html>

    7.c:forEach

    遍历:数组、List、Set、Map

    属性:

             items:要遍历的目标对象。支持表达式

             var:变量名。指向当前遍历的集合中的一个元素

             begin:开始的索引(含)

             end:结束的索引(含)

             step:步长。默认是1

             varStatus:取一个名字,引用了一个对象。

                       该对象有以下方法:

                       int getIndex():当前记录的索引号。从0开始

                       int getCount():当前记录的顺序。从1开始

                       boolean isFirst():是否是第一条记录

                       boolean isLast():是否是最后一条记录

    eg:

     
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@page import="cn.lsl.domain.Person"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
      </head>
      
      <body>
          <%
            String str[] = {"a","b","c"};
            pageContext.setAttribute("str",str);
        %>
        <c:forEach items="${str}" var="s">
            ${s }<br/>
        </c:forEach>
        <hr/>
        <%
            List list = new ArrayList();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            pageContext.setAttribute("list",list);
        %>
        <c:forEach items="${list}" var="s">
            ${s }<br/>
        </c:forEach>
        <hr/>
       
       <%
            Set set = new HashSet();
            set.add("aaa");
            set.add("bbb");
            set.add("ccc");
            pageContext.setAttribute("set",set);
        %>
        <c:forEach items="${set}" var="s">
            ${s }<br/>
        </c:forEach>
        <hr/>
        <%
            Map map = new LinkedHashMap();
            map.put("a","aaaa");
            map.put("b","bbbb");
            map.put("c","cccc");
            pageContext.setAttribute("map",map);
        %>
        <c:forEach items="${map}" var="me">
            ${me.key }==${me.value }<br/>
        </c:forEach>
        <hr/>
        <%
            String s1[] = {"a","b","c","d","e","f"};
            pageContext.setAttribute("s1",s1);
        %>
        <c:forEach items="${s1}" var="s" begin="1" end="4" step="2">
            ${s }<br/>
        </c:forEach>
        <hr/>
        <c:forEach items="${s1}" var="s"  step="2">
            ${s }<br/>
        </c:forEach>
        <hr/>
        <c:forEach begin="1" end="100" var="s">
            ${s }
        </c:forEach>
        <hr/>
        <%
        List<Person> ps = new ArrayList<Person>();
        ps.add(new Person("zs","1",true));
        ps.add(new Person("ls","1",false));
        ps.add(new Person("ww","0",false));
        ps.add(new Person("xl","0",false));
        ps.add(new Person("xq","1",true));
        ps.add(new Person("xb","1",false));
        ps.add(new Person("xj","1",false));
        pageContext.setAttribute("ps",ps);
        %>
        <c:forEach items="${ps}" var="p">
            ${p.name}:${p.gender=="1"?"男":"女"}:${p.married?"已婚":"未婚"}<br/>
        </c:forEach>
        <hr/>
        <table border="1" width="60%">
            <tr>
                <th>索引</th>
                <th>顺序</th>
                <th>第一个</th>
                <th>最后一个</th>
                <th>姓名</th>
                <th>性别</th>
                <th>婚姻</th>
            </tr>
            <c:forEach items="${ps}" var="p" varStatus="vs">
                <tr>
                    <td>${vs.index }</td>
                    <td>${vs.count }</td>
                    <td>${vs.first }</td>
                    <td>${vs.last }</td>
                    <td>${p.name }</td>
                    <td>${p.gender=="1"?"男":"女"}</td>
                    <td>${p.married?"已婚":"未婚"}</td>
                </tr>
            </c:forEach>
        </table>
        <hr/>
        <table border="1" width="60%">
            <tr>
                <th>顺序</th>
                <th>姓名</th>
                <th>性别</th>
                <th>婚姻</th>
            </tr>
            <c:forEach items="${ps}" var="p" varStatus="vs">
                <tr bgcolor="${vs.index%2==0?'#CFCFCF':'#4D88AB' }">
                    <td>${vs.count }</td>
                    <td>${p.name }</td>
                    <td>${p.gender=="1"?"男":"女"}</td>
                    <td>${p.married?"已婚":"未婚"}</td>
                </tr>
            </c:forEach>
        </table>
        
      </body>
    </html>
  • 相关阅读:
    IDEA 工具使用报错总结
    Struts2 值栈总结(ValueStack)
    hibernate 中映射关系配置
    Java 注解之总结
    ssh_整合总结
    Ajax 请求之_请求类型详解
    C++的重载赋值运算符
    vector容器使用reserve预留空间
    C++中的内存分配
    C++ const修饰指针
  • 原文地址:https://www.cnblogs.com/jameslif/p/3726041.html
Copyright © 2011-2022 走看看