天天看点

EL(表达式语言)

EL(表达式语言)

1、EL概述
    EL是JSP内置的表达式语言!
        * jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!
        * EL替代的是<%= ... %>,也就是说,EL只能做输出!
    1.1、EL的作用
        JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
        JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>

    1.2、EL的格式
        格式:${…}
        例如:${1 + 2}
    1.3、关闭EL
        如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。
        如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。
    1.4、EL运算符
      
运算符 说明 范例 结果
+ ${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
1.5、EL不显示null
        当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。

2、EL表达式格式
    先来了解一下EL表达式的格式!现在还不能演示它,因为需要学习了EL11个内置对象后才方便显示它。
        * 操作List和数组:${list[0]}、${arr[0]};
        * 操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;
        * 操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。
    如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,
    所以JavaBean一定要提供get方法,而set方法没有要求。

3、EL内置对象
    EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
        * pageScope
        * requestScope
        * sessionScope
        * applicationScope
        * param;
        * paramValues;
        * header;
        * headerValues;
        * initParam;
        * cookie;
        * pageContext;

    3.1、域相关内置对象(重点)
        域内置对象一共有四个:
            * pageScope:${pageScope.name} 等同于 pageContext.getAttribute("name");
            * requestScope:${requestScope.name} 等同于 request.getAttribute("name");
            * sessionScoep: ${sessionScope.name} 等同于 session.getAttribute("name");
            * applicationScope:${applicationScope.name} 等同于 application.getAttribute("name");
        EL表达式来读取四大域
            * ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。
            * ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!
        全域查找:${xxx}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。


    3.2、param 和 paramValues:请求参数相关内置对象
        * param:Map<String,String>类型,param对象可以用来获取参数,与request.getParameter()方法相同。
                注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。
            ${param.username }
        * paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。
            ${paramValues.hobby[0] }
            ${paramValues.hobby[1] }
    3.3、header 和 headerValues :请求头相关内置对象
        * header: Map<String,String>类型,用来获取请求头。
            ${header['User-Agent']}
        * headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。

    3.4、initParam:应用初始化参数相关内置对象
        * initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。
            <context-param>
                <param-name>yyy</param-name>
                <param-value>YYY</param-value>
            </context-param>
            ${initParam.yyy}
    3.5、Cookie相关内置对象
        * cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
            ${cookie.JSESSIONID.value }、${cookie.JSESSIONID.name }
    3.6、pageContext对象
        pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,
        ${pageContext.request.contextPath}常用的动态获得项目路径,如:/day12_1
        例如方法 pageContext.getRequest() 等同于 ${pageContext.request}。也就是读取JavaBean属性!!!
      
EL表达式 说明
${pageContext.request.queryString} pageContext.getRequest().getQueryString();
${pageContext.request.requestURL} pageContext.getRequest().getRequestURL();
${pageContext.request.contextPath} pageContext.getRequest().getContextPath();
${pageContext.request.method} pageContext.getRequest().getMethod();
${pageContext.request.protocol} pageContext.getRequest().getProtocol();
${pageContext.request.remoteUser} pageContext.getRequest().getRemoteUser();
${pageContext.request.remoteAddr} pageContext.getRequest().getRemoteAddr();
${pageContext.session.new} pageContext.getSession().isNew();
${pageContext.session.id} pageContext.getSession().getId();
${pageContext.servletContext.serverInfo} pageContext.getServletContext().getServerInfo();
例:
    AServlet:
        Address address = new Address();
        address.setCity("北京");
        address.setStreet("西三旗");

        Employee emp = new Employee();
        emp.setName("李小四");
        emp.setSalary(123456);
        emp.setAddress(address);

        request.setAttribute("emp", emp);
        request.getRequestDispatcher("/day12_1/a.jsp").forward(request,response);
    ------------------------------------------
    页面获取:
        <h3>使用el获取request域的emp</h3>
        ${requestScope.emp.address.street }
        <!-- 等同于内置对象获得 request.getAttribute("emp").getAddress().getStreet() --><br/>

      

继续阅读