鲜花便宜的网站建设,wordpress提取某个分类文章,wordpress漂浮广告插件,营销型网站建设 代理Java Web中的EL#xff08;表达式语言#xff09;详解 表达式语言(Expression Language)简称EL#xff0c;它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用#xff0c;从而规范页面代码#xff0c;增加程序的可读性及可维护性。EL为不熟悉Java语言… Java Web中的EL表达式语言详解 表达式语言(Expression Language)简称EL它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用从而规范页面代码增加程序的可读性及可维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web应用的新途径。下面对EL的语法、运算符及隐含对象进行详细介绍。 一、EL概述 1、EL简介 EL没出现之前开发Java Web应用程序时经常需要将大量的Java代码片段嵌入到JSP页面中这会使页面开起来很乱如下例子 [php] view plain copy print ? %if(session.getAttribute(“username”)! null){ out.println(session.getAttribute(“username”).toString()); }% 而是用EL则只需要下面的依据代码即可实现 ${username} 通过上面的例子我们可以知道EL表达式的语法非常简单它以”${”开头以”}”结束中间为合法的表达式具体的语法格式为 ${expression} expression用于指定要输出的内容可以使字符串也可以是由EL运算符组成的表达式。 例如在EL表达式中要输出一个字符串可以将此字符串放在一对单引号或双引号内 ${‘我叫小武灵灵’} 或${“我叫小武灵灵”} EL有以下几个特点 EL可以与JSTL结合使用也可以与JavaScript语句结合使用 EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值的和可以直接通过””号进行连接如${num1num2} EL不仅可以访问一般变量还可以访问JavaBean中的属性以及嵌套属性和集合对象 在EL中可以获得命名空间(PageContext对象它是页面中所有其他内置对象的最大范围的集成对象通过它可以访问其他内置对象) 在使用EL进行除法运算时如果除数为0则返回无穷大Infinity而不是错误 在EL中可以访问JSP的作用域(request、session、application以及page) 扩展函数可以与Java类的静态方法进行映射。 2、与低版本的环境兼容——禁用EL 目前只要安装的Web服务器能够支持Servlet 2.4/JSP 2.0,就可以在JSP页面中直接使用EL。由于在JSP2.0以前版本中没有EL所以JSP为了和以前的规范兼容还提供了禁用EL的方法。有以下三种方法 1)、使用斜杠”\” 只需要在EL的起始标记“$”前加上”\”即可 2)、使用page指令 使用JSP的page指令也可以禁用EL表达式语法格式如下 % page isELIgnored”布尔值”% true为禁用EL 3)、在web.xml文件中配置el-ignored元素 [html] view plain copy print ? jsp-config jsp-property-group url-pattern*.jsp/url-pattern el-ignoredtrue/el-ignored /jsp-property-group /jsp-config 3、保留的关键字 EL中保留的关键字如下在为变量命名时应该避免使用这些关键字 and eq gt instanceof div or le false empty not Lt ge 二、EL的运算符使用 EL的运算符在按照从左向右的计算原则下优先级如下 1、通过EL访问数据 通过EL提供的”[]”和”.”运算符可以访问数据。通常情况下这两个运算符是等价的可以相互代替。 但也不是所有情况下都可以相互代替例如当对象的属性名中包含一些特殊的符号(-或.)时就只能使用[]来访问对喜爱那个的属性。例如${userInfo[user-id]}是正确的而${userInfo.user-name}是错误的。 下面给出通过这两运算符访问数据的例子 1)、获取数组元素(只能使用[]不能用.) [html] view plain copy print ? % String[] str {一号 , 二号 , 三号 , 四号 , 五号}; request.setAttribute(user,str); % % String[] str1 (String[])request.getAttribute(user); for(int i0; i str1.length; i){ request.setAttribute(rt,i); % ${rt}: ${user[rt] }br % }% 2)、List集合元素的获取(只能使用[]不能用.) [html] view plain copy print ? % ListString list newArrayListString(); list.add(一号); list.add(二号); list.add(三号); session.setAttribute(user,list); % % ListString list1 (ListString)session.getAttribute(user); for(int i 0 ; i list1.size() ;i){ request.setAttribute(rt,i); % ${rt}: ${user[rt] }br % }% 2、在EL中进行算术运算 运算符 功能 示例 结果 加 ${11} 2 - 减 ${1-1} 0 * 乘 ${2*2} 4 /或div 除 ${2/1}或${2 div 1} 2 ${2/0}或${2 div 0} Infinity %或 mod 求余 ${3%2}或${3mod2} 1 ${3%0}或${3 mod0} 异常:java.lang.ArithmeticException:/by zero 3、在EL中判断对象是否为空 通过empty运算符实现用来确定一个对象或比那辆是否为null或空格式如下 ${empty expression} 例如 [html] view plain copy print ? %request.setAttribute(user , );% %request.setAttribute(user1 , null);% %request.setAttribute(user2 , 2);% ${emptyuser} //返回值为true ${emptyuser1} //返回值为true ${emptyuser2} //返回值为false 4、在EL中进行逻辑关系运算 在EL中通过逻辑运算符和关系运算符可以实现逻辑关系运算。其使用方法都差不多下面给出一个例子 [html] view plain copy print ? % request.setAttribute(userName,小武); request.setAttribute(pwd,123456); % userName ${userName }br pwd ${pwd }br \${userName! and (pwd asd )} ${userName! and (pwd asd )}br \${userName 小武 and pwd 123456 } ${userName 小武 and pwd 123456 }br 5、在EL中进行条件运算 在EL中进行条件运算唯一的优点在于其非常简单方便和Java语言中的用法完全一致其语法格式如下 ${条件表达式 表达式1 表达式2} 例如${11 ? “对”: “错“} 三、EL的隐含对象 为了能够获得Web应用程序中的相关数据EL提供了11个隐含对象这些对象类似于JSP的内置对象也是直接通过对象名进行操作。 1、页面上下文对象 pageContext用于访问JSP内置对象和servletContext。在获取到这些内置对象后就可以获取器属性值。这些属性与对象的gexxx()方法相对象在使用时去掉方法名中的get并将首字母改为小写即可。下面介绍如何应用页面上下文对象访问你JSP的内置对象和servletContext对象。 1)、访问request对象——${pageContext.request} 获取到request对象后就可以通过该对象获取与客户端相关的信息。例如要访问getServerPort()方法可以使用下面的代码 ${pageContext.request.serverPort} 注意不可以通过pageContext对象获取保存到request范围内的变量。 2)、访问response对象——${pageContext.response} 3)、访问out对象——${pageContext.out} 4)、访问session对象——${pageContext.session} 5)、访问exception对象——${pageContext.exception} 6)、访问page对象——${pageContext.page} 7)、访问servletContext对象——${pageContext.servletContext} 2、访问作用域范围的隐含对象 在EL中提供了4个用于访问作用域范围的隐含对象即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对喜爱那个指定要查找的标识符的作用域后系统将不再按照默认的顺序(page、request、session及application)来查找相应的标识符。他们与JSP中的page、request、session及application内置对象类似。只不过这4个隐含对象只能用来取得指定范围内的属性值而不能取得其他相关信息。 1)、pageScope隐含对象 pageScope对象用于返回包含page(页面)范围内的属性的集合返回值为java.util.Map对象。下面是一个具体例子通过pageScope对象读取page范围内的JavaBean属性值。 新建JavaBean为UserInfo [java] view plain copy print ? package com; public class UserInfo { private String name ; public void setName(Stringname) { this.name name; } public String getName() { return name; } } Index.jsp添加 [html] view plain copy print ? body jsp:useBeanidjsp:useBeaniduser scopepage classcom.UserInfotypecom.UserInfo/jsp:useBean jsp:setPropertypropertyjsp:setPropertypropertyname nameuser value小武灵灵 / ${pageScope.user.name} /body 2)、requestScope隐含对象 用于返回包含request范围内的属性值的集合返回值为java.util.Map对象。例如 [html] view plain copy print ? % request.setAttribute(userName,小武灵灵); % ${requestScope.userName } 3)、sessionScope隐含对象 用于返回包含session范围内的属性值的集合。例如 [html] view plain copy print ? % session.setAttribute(userName,小武灵灵); %applicationapplication ${sessionScope.userName } 4)、applicationScope隐含对象 用于返回包含application范围内的属性值的集合。例如、 [html] view plain copy print ? % application.setAttribute(userName,小武灵灵); {applicationScope.userName } 3、访问环境信息的隐含对象 EL中提供了6个访问环境信息的隐含对象分别为 1)、param对象 用于获取请求参数的值应用在参数值只有一个的情况返回结果为字符串。例如 [html] view plain copy print ? formactionformaction methodget nameform1 input nameuser typetextvalue小武灵灵 input typesubmit /form ${param.user} 2)、paramValues对象 如果一个请求参数名对应多个值则需要使用paramValues对象获取请求参数的值该对象返回的结果为数组。例如 [html] view plain copy print ? formactionformaction methodget nameform1 input typecheckboxnameaffect idaffect value1 input typecheckboxnameaffect idaffect value2 input typecheckboxnameaffect idaffect value3 input typecheckboxnameaffect idaffect value4 input typesubmit /form %request.setCharacterEncoding(GB18030); % 选择的是:${paramValues.affect[0]}${paramValues.affect[1]}${paramValues.affect[2]}${paramValues.affect[3]} 3)、header和headerValues对象 用于获取HTTP请求的一个具体的header值当同一个header存在多个值时需使用headerValues对象。例如 ${header[“connection”]}获取HTTP请求的header的是否需要持久连接这一属性 4)、initParam对象 用于获取Web应用初始化参数的值。例如 在web.xml文件中设置一个初始化参数user context-param param-nameuser/param-name param-value小武/param-value /context-param 使用EL获取该参数 ${initParam.user} 5)、cookie对象 用于访问由请求设置的cookie。例如 [html] view plain copy print ? % Cookie cookie new Cookie(user, xiaowu); response.addCookie(cookie); % ${cookie.user.value } 四、定义和使用EL函数 EL允许定义和使用函数但是eclipse好像不能自动生成tld文件我嫌麻烦而且EL函数不常用所以这里不介绍了。