`
makewish0122
  • 浏览: 28301 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java:EL表达式

阅读更多

java:EL表达式

EL表达式:  

    1)el表达式主要用于获取数据,它的原理是:通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域中先后( page ——   

    request —— session —— application )获取对象,如果在一个域中获取到了,则不再从下个域中寻找,返回结果。如果域对象中不存在标识符所对应  

    的对象,则返回结果为””(注意,不是null)。  

      

    2)EL表达式的四大作用:  

        >> 获取数据(重点)  

        >> 执行运算  

        >> 获取web开发对象  

        >> 调用java方法  

      

    3)可用page指令的isELIgnored属性类控制页面忽略所有的EL表达式,此时,所有的EL表达式都会被当成一个普通的字符串来处理:  

        <%@ page isELIgnored="false" %>  // 默认为false   

      

      

1、EL作用之一:获取数据  

      

    1)获取四个域中的值:  

        a、  

            <%  

                pageContext.setAttribute("key""el_page");  

                request.setAttribute("key""el_request");  

            %>  

            key:${key}  

            <%-- 输出结果为:el_page  --%>  

          

        b、  

            <c:set  var="username"  value="张三"  scope="page" ></c:set>  

            username: ${username}  

            username: ${pageScope.username}  

      

      

    2)获取存储在四个域中的JavaBean对象的属性值 ${beanName.属性名 } :  

        举例:  

        a、  

            <jsp:useBean     id="student" class="cn.itcast.web.domain.Student" scope="page"/>  

            <jsp:setProperty name="student" property="name" value="张三" />  

            <jsp:setProperty name="student" property="age" value="30" />  

            <jsp:setProperty name="student" property="ID" value="24" />  

              

            <%-- 输出结果为:张三,30,24 --%>  

            姓名:${student.name}<br/>  

            年龄:${student.age}<br/>  

            ID:${student.ID}<br/>  

              

            注意:当使用EL表达式获取javaBean的属性的值时,前提是:这个对象必须是存进域中的,如果student对象时以普通方式创建,  

            即:Student student = new Student(24,"张三",30),则返回的结果为””(空串)。因为底层用的方式是:pageContext.findAttribute()  

          

        b、使用jstl设置javaBean的属性,用EL表达式获取(推荐):  

              

            <jsp:useBean id="student" class="cn.itcast.web.jsp.domain.Student" scope="request"></jsp:useBean>  

            <c:set  target="${student}"  property="name"  value="张三" ></c:set>  

            <c:set  target="${student}"  property="age"  value="15" ></c:set>  

      

            student.getName:${student.name}<br/>  

            student.getAge :${student.age}  

      

      

    3)在多个对象中导航的时候,如: ${XXX . YYY . ZZZ}  

        首先会调用pageContext.findAttribute(“XXX”)的方法,在四个域中寻找XXX的对象,接着是调用getYYY()的方法找到YYY对象,再调用getZZZ()  

        的方法得出结果,即:pageContext.findAttribute().getYYY().getZZZ()前提是:XXX、YYY对象也是存在与四个域中的!  

          

        ${student.name.class.name}:  

        用意:pageContext.findAttribute("student").getName().getClass().getName();  

        但因为pageContext.findAttribute("student").getName().getClass()返回的是:java.lang.String.class的对象,而这个对象并没有存  

        在四个域中,而且经过验证,无法将Class字节码存入域对象:<jsp:useBean id="class" class="java.lang.Class" />  

        因为id的值在此表示对象的引用变量,而class为java中的保留关键字,所以无法用这种方式!!所以这样做是错误的。  

          

      

    4)获取数组、Collection、Map类型集合的数据(重点)  

      

        a、获取List集合的元素  

            <%   

                List<String> strList = new ArrayList<String>();  

                strList.add("haha");    strList.add("hehe");    strList.add("xixi");  

                session.setAttribute("strList", strList); // 别忘了把集合绑定到域中   

            %>  

            第一个用户:${strList[0]}<br/>  

            第二个用户:${strList[1]}<br/>  

            第三个用户:${strList[2]}<br/>  

      

            <c:forEach  var="name"  items="${strList}">  

                ${name} <%-- haha hehe xixi  --%>>  

            </c:forEach>  

      

        b、获取Map集合的元素,注意Map集合的取出方式,调用的是entrySet的方法  

            <%   

                Map<String,Student> map = new HashMap<String,Student>();  

                Student s1 = new Student("A111","张三",12);   Student s2 = new Student("B222","李四",12);  

                Student s3 = new Student("C333","王五",12);  

                map.put(s1.getId(), s1);    map.put(s2.getId(), s2);    map.put(s3.getId(), s3);  

                application.setAttribute("studentMap", map);  // 别忘了把集合绑定到域中   

            %>  

            ${studentMap}<br/>  

            <c:forEach  var="entry"  items="${studentMap} >  

                学生的编号:${entry.key}<br/>  

                学生的姓名:${entry.value}<br/>  

            </c:forEach>  

              

        c、获取Set集合的元素  

            <%   

                Set<String> set = new HashSet<String>();  

                set.add("aaaaaaa");  

                set.add("bbbbbbb");  

                pageContext.setAttribute("set", set);  // 别忘了把集合绑定到域中   

            %>  

            ${set}<br/> <%-- [bbbbbbb, aaaaaaa]  --%>  

            <c:forEach var="str" items="${set}">  

                ${str}<br/>  

            </c:forEach>  

          

        d、获取数组的元素  

            <%   

                int [] array = {1,2,3,4,5};  

                pageContext.setAttribute("array", array, PageContext.SESSION_SCOPE);  // 别忘了把数组绑定到域中   

            %>  

            第二个值:${array[1]}<br/>  

            <c:forEach var="intValue" items="${array}">  

                ${intValue}<br/>  

            </c:forEach>  

  

  

2、EL作用之二:执行简单的运算和逻辑判断  

    示例:  

    ${1==1}<br/> <%--true--%>  

    ${5+4}<br/><%--9--%>  

    ${student.age + 10}<br/><%--40--%>  

    ${student.age > 20 && student.age < 50}<br/><%--true--%>  

      

    三种EL表达式中经常使用的运算符和一种表达式:  

    1、empty运算符  :检查变量是否为null或“空”,很好用!!!  

    2、二元表达式     :${user!=null?user.name : “”} ,很好用!!!  

    3、[ ] 和 . 号运算符  

      

    <c:set var="user" value="王五" scope="page" />  

    <c:remove var="user" scope="page" />  

    欢迎${!empty user ? user : "游客"}光临!!  

    <hr/>  

      

    数据回显:  

    <c:set var="city" value="广州" />  

    <select>  

    <option ${city == "广州" ? "selected" : ""}>广州</option>  

    <option ${city == "上海" ? "selected" : ""}>上海</option>  

    <option ${city == "北京" ? "selected" : ""}>北京</option>  

    </select>  

3、EL表达式作用之三:获取WEB开发常用对象  

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

<%--1、利用pageContext把当前的web应用路径写活: --%>  

    <a href="${pageContext.request.contextPath}/result.jsp" target="_blank">点击</a>  

    <%--  

    底层用的方法就是:   

    HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();  

    String contentPath = req.getContextPath();  

    --%>  

  

<%--2、在指定的域中获取绑定的对象 --%>  

    <c:set var="user" value="pageScope_user" scope="page" />  

    <c:set var="user" value="requestScope_user" scope="request"/>  

    <c:set var="user" value="sessionScope_user" scope="session"/>  

    <c:set var="user" value="applicationScope_user" scope="application"/>  

    用户:${pageScope.user}<br/>  

    用户:${requestScope.user}<br/>  

    用户:${sessionScope.user}<br/>  

    用户:${applicationScope.user}<br/>  

  

<%--3、测试param与paramValues,地址栏访问:  

    http://localhost:8080/jsp/el.jsp?sex=nan&like=basketball&like=football&like=swim --%>   

  

    性别:${param.sex}<br/>  

    <%--底层代码:针对于一个参数  

    String sex = pageContext.getRequest().getParameter("sex");  

    --%>  

  

    第一个爱好:${paramValues.like[0]}<br/>  

    第二个爱好:${paramValues.like[1]}<br/>  

    第三个爱好:${paramValues.like[2]}<br/>  

      

    <%--底层代码:针对多个同名参数  

    String [] like = pageContext.getRequest().getParameterValues("like");  

    --%>  

  

<%--4、测试header与headerValues --%>  

    请求头:${header}<br/>  

    请求头:${header.host}<br/>  

    请求头:${header.cookie}<br/>  

    请求头:${headerValues['Accept-Encoding'][0]}<br/>  

    请求头:${headerValues['Accept-Language'][0]}<br/>  

    <%--  

    测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则  

    要headerValues[“Accept-Encoding”]  

    --%>  

  

<%--5、测试cookie与initParam --%>  

    <%   

    Cookie cookie = new Cookie("password""123456");  

    cookie.setMaxAge(24*60);  

    response.addCookie(cookie);  

    %>  

    cookie的名:${cookie.password.name}<br/>  

    cookie的值:${cookie.password.value}<br/>  

    <%--  

    测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.username.name}或${cookie.username.value}。  

    new Cookie(“username”,”jack”);  

    --%>  

      

    web初始化参数:${initParam.tel}<br/>  

    web初始化参数:${initParam.email}<br/>  

    <%--  

    <context-param>  

        <param-name>tel</param-name>  

        <param-value>123</param-value>  

    </context-param>  

    <context-param>  

        <param-name>email</param-name>  

        <param-value>xxx@qq.com</param-value>  

    </context-param>  

    --%>  

 

4、EL表达式作用之四:调用java方法  

 

    EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。  

      

    示例:${prefix:method(params)}  

    1)在EL表达式中调用的只能是Java类的静态方法。  

    2)这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。  

    3)EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。  

    4)EL函数只能访问与WEB无关的需求,与WEB有关的需求还是需要使用自定义标签来解决。  

  

    一般来说, EL自定义函数开发与应用包括以下三个步骤:  

    1)编写一个Java类的静态方法。  

    2)编写标签库描述符(tld)文件,在tld文件中描述自定义函数,在WEB-INF/目录下。  

    3)在JSP页面中导入和使用自定义函数。  

      

      

    1) 写一个普通类,在其中写一个静态的方法  

        public class Filter {  

            // 转义方法   

            public static String filter(String message) {  

                return  null;  

            }  

        }  

   

    2)tld文件的配置:  

        <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>el</short-name>    // 函数的前缀   

            <uri>http://java.sun.com/jsp/jstl/el</uri>   

      

            <function>  

                <name>filter</name>  

                <function-class>cn.itcast.web.jsp.el.Filter</function-class>  

                <function-signature>java.lang.String filter(java.lang.String)</function-signature>  

            </function>  

        </taglib>  

  

    3)在JSP页面中引用自定义EL函数  

        <%@ page language="java" pageEncoding="UTF-8"%>  

        <%@ taglib uri="http://java.sun.com/jsp/jstl/el" prefix="el" %>  

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

        <html>  

            <body>  

                ${el:filter("<a href='#'>点点</a>")}<br/>  

            </body>  

        </html>  

  

    开发EL Function注意事项:  

        1)编写完标签库描述文件后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。   

        2)TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。  

          

        <function>元素用于描述一个EL自定义函数,其中:  

        <name>子元素用于指定EL自定义函数的名称。  

        <function-class>子元素用于指定完整的Java类名。  

        <function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的完整类型,  

        各个参数之间用逗号分隔。  

  

    EL注意事项:  

        EL表达式是JSP 2.0规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。  

        注意:有些Tomcat服务器如不能使用EL表达式  

            1)升级成tomcat6/7  

            2)升级JSTL的JAR包  

            3)在JSP中加入<%@ page isELIgnored="false" %> 即,告诉JSP引擎不忽略EL表达式语言。  

            4)struts中不推荐使用EL表达式,而struts使用的是OGNL(对象导航语言) 

 

 

 

 

分享到:
评论

相关推荐

    EL表达式的使用详解

    EL 表达式是一种在 Java 服务器页面(JSP)中使用的表达式语言。它提供了一种简单的方式来访问和操作 Java 对象的属性。EL 表达式广泛应用于 JSP、Servlet、JSF 等 Web 开发技术中。本文将详细介绍 EL 表达式的使用...

    JAVA JSP页面技术之EL表达式整理归纳总结

    Java JSP页面技术之EL表达式整理归纳总结的知识点如下: EL表达式的概念和作用: EL表达式,全称Expression Language(表达式语言),是一种在JSP(Java Server Pages)技术中使用到的,用于简化Java Web应用程序中...

    java中的EL表达式禁用

    4. 如何禁用EL表达式: 禁用EL表达式主要有以下几种方式: - 在web.xml配置文件中:可以通过设置`&lt;jsp-config&gt;`元素下的`&lt;elIgnored&gt;`子元素为`true`来禁用EL。例如: ```xml &lt;el-ignored&gt;true&lt;/el-ignored&gt; ...

    03_javaWeb知识之:EL表达式

    ### EL表达式详解 #### 一、EL表达式概述 EL(Expression Language)是一种简洁的表达式语言,用于访问和操纵存储在JSP页面中的数据。EL表达式类似于`&lt;%= %&gt;`, 它们被用来在JSP页面中输出内容。在JSP页面中使用EL...

    java jsp EL表达式

    Java JSP EL表达式 EL表达式是Java服务器页面(JSP)的一种特殊语言,用于在Web应用程序中输出文本到页面。它的主要功能是从某个范围中找到一个JavaBean对象,并显示其某个属性值。EL表达式的基本格式为${ },它...

    EL表达式EL表达式

    **EL表达式(Expression Language)**是Java服务器页面(JSP)技术中的一个重要组成部分,它提供了一种简洁而强大的方式来访问和操作数据,如JavaBeans属性、JSP作用域中的对象等。EL表达式的设计目标是简化JSP页面的...

    Fel Javael表达式引擎

    1. 算术表达式:通过eval方法求解表达式的值,例如"5000*12+7500",并输出结果67500。 2. 变量的使用:可以在上下文环境中设置变量,并在表达式中使用这些变量。例如,设置单价、数量和运费,然后计算它们的和,输出...

    JAVAEE实验报告EL表达式和jstl标签库的使用.pdf

    JAVAEE 实验报告 EL 表达式和 JSTL 标签库的使用 EL 表达式(Expression Language)是一种在 JSP 页面中使用的脚本语言,用于简化 JSP 页面的开发。EL 表达式可以访问 JSP 页面中的变量、对象和集合,进行逻辑操作...

    jsp el表达式

    在JavaWeb开发中,JSP Expression Language(EL表达式)是一种简洁、强大的脚本语言,用于在JavaServer Pages(JSP)中获取和操作JavaBean或其他数据源中的数据。EL表达式的引入是为了简化JSP页面的编写,减少Java...

    Java-EL表达式语言讲解,适合初级人员入门学习

    ### Java-EL表达式语言详解 #### 一、EL表达式概述 EL(Expression Language),即表达式语言,是JavaServer Pages(JSP)技术中的一个重要组成部分。EL表达式主要用于简化JSP页面中的数据检索过程,使得开发者能够...

    EL表达式(很全很强大)

    ### EL表达式详解 #### 一、EL表达式的语法结构及使用 EL(Expression Language)是一种简化了的数据访问语言,用于获取JavaBean属性值或调用其方法等操作。其基本语法结构为`${expression}`,这使得开发者能够在...

    EL表达式练习 EL表达式练习

    EL表达式可以与JavaServer Pages Standard Tag Library (JSTL) 结合使用,增强其功能。例如,`&lt;c:out value="${expression}"&gt;` 用于安全地输出EL表达式的结果,防止跨站脚本攻击(XSS)。 **EL表达式的高级特性** 1...

    EL表达式的应用

    **EL表达式(Expression Language)**是Java服务器页面(JSP)技术中的一个重要组成部分,它提供了一种简洁、统一的方式来访问和操作JavaBean属性以及与请求相关的数据。在JSP 2.0及其后续版本中,EL表达式被广泛使用,...

    el表达式EL表达式言语和JSTL

    综上所述,EL表达式和JSTL是构建高效、可维护的Java Web应用的重要工具。它们结合使用,可以显著提升开发效率,同时降低复杂度,使得JSP页面更专注于呈现逻辑。通过深入理解和熟练掌握这两者,开发者可以更好地实现...

    EL表达式使用文档,方便快速使用EL表达式.pdf

    EL 表达式的格式为 ${EL 表达式},其中 EL 表达式可以是任何有效的 Java 表达式。 EL 表达式可以获得四大域中的数据,包括: * pageContext 域中的值:${pageScope.key} * request 域中的值:${requestScope.key} ...

    EL表达式的语法介绍

    EL 表达式是 Java 服务器页面(JSP)和 Java 服务器面板(JSF)中使用的一种表达式语言,用于在 Web 应用程序中实现动态内容。EL 表达式可以被解析成数值表达式和方法表达式,其中取值表达式用于引用一个值,而方法...

    el表达式用法部分解说

    ### EL表达式详解 EL(Expression Language)表达式在Java Web开发中扮演着重要的角色,尤其是在JSP(Java Server Pages)技术中。本文将详细解释EL表达式的使用方法及其应用场景,帮助开发者更好地理解和掌握这一...

    EL表达式包括字符串处理,时间日期的格式化,数字处理

    ### EL表达式详解 #### 一、EL表达式的概述与基本使用 EL(Expression Language),即表达式语言,是JavaServer Pages (JSP) 2.0标准的一部分,用于简化JSP页面中对数据访问的操作。它允许开发者通过简单的语法在...

    java EL 表达式的例子

    Java EL(Expression Language)表达式是Java服务器页面(JSP)技术中的一个重要组成部分,它用于在JSP中简便地访问...通过实际操作这11个JSP示例,开发者可以更好地理解和掌握Java EL表达式,并将其应用到实际项目中。

Global site tag (gtag.js) - Google Analytics