EL表达式基础
EL表达式简介
EL 全名为Expression Language。EL主要作用:
获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP 页面中完成一些简单的逻辑运算。${user==null}
获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web 常用对象的引用,从而获得这些对象中的数据。
调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。获取数据(1)
使用EL表达式获取数据语法:“${标识符}”
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串)。
示例:${user}
EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问有序集合某个位置的元素
${map.key} :获得map集合中指定key的值
结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:迭代数组
迭代collection类型集合
迭代map类型集合
获得web开发常用对象
测试各个隐式对象
注意事项
测试headerValues时,如果头里面有“-”,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${https://www.360docs.net/doc/8a10074987.html,}或${cookie.key.value}
使用EL调用Java方法
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。
示例:${prefix:method(params)}
在EL表达式中调用的只能是Java类的静态方法。
这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
EL Function开发步骤
一般来说,EL自定义函数开发与应用包括以下三个步骤:
编写一个Java类的静态方法
编写标签库描述符(tld)文件,在tld文件中描述自定义函数。
在JSP页面中导入和使用自定义函数
示例:小写转大写
开发EL Function注意事项
编写完标签库描述文件后,需要将它放置到
TLD文件中的
EL注意事项
EL表达式是JSP 2.0规范中的一门技术。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。
注意:有些Tomcat服务器如不能使用EL表达式
(1)升级成tomcat6
(2)在JSP中加入<%@ page isELIgnored="false" %>
STL中的常用EL函数
由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。
这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库,如下所示:
在页面中使用JSTL定义的EL函数:
<%@taglib uri="https://www.360docs.net/doc/8a10074987.html,/jsp/jstl/functions" prefix="fn"%>
fn:toLowerCase
fn:toLowerCase函数将一个字符串中包含的所有字符转换为小写形式,并返回转换后的字符串,它接收一个字符串类型的参数,例如
fn:toLowerCase("https://www.360docs.net/doc/8a10074987.html,") 的返回值为字符串“https://www.360docs.net/doc/8a10074987.html,”
fn:toLowerCase("")的返回值为空字符串
fn:toUpperCase函数将一个字符串中包含的所有字符转换为大写形式,并返回转换后的字符
串,它接收一个字符串类型的参数。例如:
fn:toUpperCase("https://www.360docs.net/doc/8a10074987.html,") 的返回值为字符串“https://www.360docs.net/doc/8a10074987.html,”
fn:toUpperCase("")的返回值为空字符串
fn:trim
fn:trim函数删除一个字符串的首尾的空格,并返回删除空格后的结果字符串,它接收一个字符串类型的参数。需要注意的是,fn:trim函数不能删除字符串中间位置的空格。
例如,fn:trim(" https://www.360docs.net/doc/8a10074987.html, ") 的返回值为字符串“www.it https://www.360docs.net/doc/8a10074987.html,”。
fn:length
fn:length函数返回一个集合或数组大小,或返回一个字符串中包含的字符的个数,返回值为int类型。fn:length函数接收一个参数,这个参数可以是
如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0。
fn:split
fn:split函数以指定字符串作为分隔符,将一个字符串分割成字符串数组并返回这个字符串数组。
fn:split函数接收两个字符串类型的参数,第一个参数表示要分割的字符串,第二个参数表示作为分隔符的字符串。
例如,fn:split("https://www.360docs.net/doc/8a10074987.html,", ".")[1]的返回值为字符串“it315”。
fn:join
fn:join函数以一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串并返回合并后的结果字符串。fn:join函数接收两个参数,第一个参数是要操作的字符串数组,第二个参数是作为分隔符的字符串。
如果fn:join函数的第二个参数是空字符串,则fn:join函数的返回值直接将元素连接起来。例如:
假设stringArray是保存在Web域中的一个属性,它表示一个值为{"www","it315","org"}的字符串数组,则fn:join(stringArray, “.")返回字符串“https://www.360docs.net/doc/8a10074987.html,”
fn:join(fn:split("www,it315,org", ","), ".") 的返回值为字符串“https://www.360docs.net/doc/8a10074987.html,”
fn:indexOf
fn:indexOf函数返回指定字符串在一个字符串中第一次出现的索引值,返回值为int类型。fn:indexOf函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,那么,不管第二个参数字符串在第一个参数字符串中出现几次,fn:indexOf函数总是返回第一次出现的索引值;如果第一个参数中不包含第二个参数,则fn:indexOf函数返回-1。如果第二个参数为空字符串,则fn:indexOf函数总是返回0。例如:
fn:indexOf("https://www.360docs.net/doc/8a10074987.html,","t3") 的返回值为5
fn:contains
fn:contains函数检测一个字符串中是否包含指定的字符串,返回值为布尔类型。fn:contains 函数在比较两个字符串是否相等时是大小写敏感的。
fn:contains函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,则fn:contains函数返回true,否则返回false。如果第二个参数的值为空字符串,则fn:contains函数总是返回true。实际上,fn:contains(string, substring)等价于fn:indexOf(string, substring) != -1。
忽略大小的EL函数:fn:containsIgnoreCase
fn:startsWith
fn:startsWith函数用于检测一个字符串是否是以指定字符串开始的,返回值为布尔类型。
fn:startsWith函数接收两个字符串类型的参数,如果第一个参数字符串以第二个参数字符串开始,则函数返回true,否则函数返回false。如果第二个参数为空字符串,则fn:startsWith 函数总是返回true。例如:
fn:startsWith("https://www.360docs.net/doc/8a10074987.html,","it315")的返回值为false
与之对应的EL函数:fn:endsWith
fn:replace
fn:replace函数将一个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。fn:replace方法接收三个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示源字符串中要被替换的子字符串,第三个参数表示要被替换成的字符串。例如:
fn:replace("www it315 org", "", ".")的返回值为字符串“https://www.360docs.net/doc/8a10074987.html,”
fn:substring
fn:substring函数用于截取一个字符串的子字符串并返回截取到的子字符串。fn:substring函数接收三个参数,第一个参数是用于指定要操作的源字符串,第二个参数是用于指定截取子字符串开始的索引值,第三个参数是用于指定截取子字符串结束的索引值,第二个参数和第三个参数都是int类型,其值都从0开始。例如:
fn:substring("https://www.360docs.net/doc/8a10074987.html,", 4, 9) 的返回值为字符串“it315”
fn:substringAfter
fn:substringAfter函数用于截取并返回一个字符串中的指定子字符串第一次出现之后的子字符串。fn:substringAfter函数接收两个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示指定的子字符串,例如:
fn:substringAfter(“https://www.360docs.net/doc/8a10074987.html,”, “.”)的返回值为字符串“https://www.360docs.net/doc/8a10074987.html,”。
与之对应的EL函数为:fn:substringBefore
JavaBean与Jsp
JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
这个Java类必须具有一个无参的构造函数
属性必须私有化。
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
虽然Sun公司在定义JavaBean规范时,允许Java开发人员把JavaBean设计得可以像Swing 组件一样功能强大,但在实际的J2EE开发中,通常只使用到以上JavaBean最基本的特性。JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据
JavaBean的属性
JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。
在JSP中使用JavaBean
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
如果存在则直接返回该JavaBean对象的引用。
如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。常用语法:
scope="page|request|session|application"/> id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。 class属性用于指定JavaBean的完整类名(即必须带有包名)。 scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session 和application等四个值中的一个,其默认值是page。 翻译成的Servlet源码: java.util.Date currentDate = null; synchronized (_jspx_page_context) { currentDate = (java.util.Date) _jspx_page_context.getAttribute( "currentDate", PageContext.PAGE_SCOPE); if (currentDate == null){ currentDate = new java.util.Date(); _jspx_page_context.setAttribute("currentDate", currentDate, PageContext.PAGE_SCOPE); } } 带标签体的 语法: Body
功能:
Body部分的内容只在
语法格式:
{ property="propertyName" value="{string | <%= expression %>}" | property="propertyName" [ param="parameterName" ] | property= "*" }/> name属性用于指定JavaBean对象的名称。 property属性用于指定JavaBean实例对象的属性名。 value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。 param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。 语法: name属性用于指定JavaBean实例对象的名称,其值应与 如果一个JavaBean实例对象的某个属性的值为null,那么,使用 JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean 模式,一种是Servlet+JSP+JavaBean模式。 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据。 Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。 EL表达式和JSTL标签快速入门 EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。 示例:使用EL表达式获取request、session、applection域中的数据。 EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。 示例:使用EL表达式获取Bean属性。 结合JSTL标签,EL表达式也可轻松获取各种集合中的元素。 示例:使用EL表达式获取List、Map集合中的元素。 EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。 Java邮件开发介绍 为什么要学习javamail开发 现在很多Web应用在开发时都需要集成邮件发送功能,例如: 给新注册的用户自动发送一封包含其注册信息的欢迎Email。 给过生日的注册会员自动发送一封表示祝贺的Email。 将网站的最新活动信息通过Email发送给所有的注册会员。 等等…… 这些功能的实现都需要软件开发人员在开发WEB应用中编写相应的邮件处理程序。 学习javamail主要包括两部分:生成邮件和发送接收邮件。 效果演示: 可以编写程序代码生成一封带内嵌图片的邮件 可以编写程序生成一封即带附件又带图片的复杂邮件 可以编写java邮件发送程序发送邮件 实现类似sina、sohu的web邮件发送程序 邮件开发过程中的一些常见问题 中文名的邮件附件的乱码问题 Tomcat中Javamail支持与冲突问题 如何实现邮件群发 邮件开发涉及到的一些基本概念 邮件服务器和电子邮箱 邮件传输协议 电子邮件的发送和接收过程 邮件服务器和电子邮箱 邮件服务器 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。 这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 电子邮箱: 电子邮箱(Email地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。用户在邮件服务器上申请了一个账号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个账号以及空间,发送电子邮件和保存别人发送过来的电子邮件。 邮件传输协议和邮件服务器类型 SMTP协议(画图演示) 用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通信规则,SMTP协议就是用于定义这种通讯规则的。 因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称为SMTP服务器。(25) POP3协议 同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通讯格式,POP3协议用于定义这种通讯格式。 因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110) 手工演示电子邮件的发送 准备实验环境 提前在sohu和sina上注册一个免费账号 获取smtp和pop3服务器的名称 Sina或sohu会在帮助中心里提示管理当前注册账号的邮件服务器的主机名。 编写base64编码程序对用户名和密码进行编码 手工使用SMTP协议发送邮件 编写Socket程序发送电子邮件 如何配置outlook收发邮件 邮件服务器的配置 SMTP协议 ehlo 主机名 auth login //经过base64编码后的用户名和密码 mail from: rcpt to: data .号代表邮件内容的结束 quit pop3协议 user pass stat list retr quit 使用POP3协议手工接收邮件 创建邮件---RFC822文档 RFC822文档规定了如何编写一封简单邮件 邮件头和邮件体,两者使用空行分隔 邮件头 from字段 to字段 subject字段 cc、bcc字段 邮件体 邮件内容 利用RFC822文档漏洞发送假冒邮件(163.263不会成功,sohu、sina可以) 创建邮件---MIME协议 MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息 对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分割线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件) MIME协议常用头字段 Content-type:字段 数据类型 以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、message 等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包含plain、html、xml、css等子类型。 数据的关系 multipart/mixed、multipart/related multipart/alternative MIME协议常用头字段 Content-Disposition头字段 Content-Disposition头字段用于指定邮件阅读处理程序处理数据内容的方式,有inline和attachment两种标准方式,inline表示直接处理,而attachment表示当做附件处理。如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示:Content-Disposition:attachment;filename=“1.jpg”,前面的MIME头字段表示MIME消息体的内容为邮件附件,附件名为“1.jpg” Content-ID头字段 Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标示号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为:Content-ID:it315logo_gif,那么,在HTML 正文中就需要使用如下HTML语句来引用该图片资源:。注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。 使用JavaMail API创建邮件 查看API类图 创建简单邮件 创建包含内嵌图片的邮件 创建包含附件的邮件 包含内嵌图片和附件的复杂邮件 中文名的邮件附件的乱码问题 其它应用 邮件发送程序集成到WEB应用中 编写类似sina的web邮件发送程序 MX与A记录(配置邮件服务器相关的信息) 邮件群发程序 为什么要学习邮件开发 许多办公自动化项目(OA)中都要附带发送邮件的功能. 在许多网站项目中也都需要附带发送邮件的功能,即要求软件开发人员在WEB应用中编写相应的邮件处理程序。 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail 给过生日的注册会员自动发送一封表示祝贺的E-Mail 将网站的最新活动信息通过E-Mail发送给所有的注册会员 如何学习邮件开发 学习邮件开发包括两大方面: 发送与接收邮件 创建与解析邮件内容 邮件服务器 电子邮箱 邮件客户端软件 邮件传输协议 电子邮件的传输过程 1.1 EL表达式: EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。 EL表达式被解析成数值表达式和方法表达式。其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。一旦被解析之后,表达式能够被优化地计算一次或多次。 下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述 1.1.1Eval-expression Eval-expression是以使用${expr}或者#{expr}结构的形式构成。两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。 从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。而${expr}这种界 定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。 1.1.1.1作为取值表达式的计算表达式 当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。 右值比如: EL表达式总结 EL表达式总是用大括号括起,而且前面有一个美元符($)前缀:${expression}。 表示式中第一个命名变量要么式一个隐式对象,要么是某个作用域(页面作用域、请求作用域、会话作用域或应用作用域)中的一个属性。 点号操作符允许你使用一个Map键或一个bean性质名来访问值,例如,使用${foo.bar}可以得到bar的值,在此,bar是Map foo的Map键名,或者是bean foo的一个性质。放在点号操作符右边的东西必须遵循Java的标识符命名规则!(换句话说,必须以一个字母、下划线或美元符开头,第一个字符后面可以有数字,但不能有其他字符)。 点号右边只能放合法的Java标识符。例如,${foo.1}键就不可以。 []操作符比点号功能更强大,因为利用[]可以访问数组和List,可以把包含命名变量的表达式放在中括号里,而且可以做任意层次的嵌套,只要你受得了。 例如,如果musicList是一个ArrayList,可以用${musicList[0]}或${musicList[“0”]}来访问列表的第一个值。EL并不关心列表索引加不加引号。 如果中括号里的内容没有用引号引起来,容器就会进行计算。如果确实放在引号里,而且不是一个数组或List的索引,容器就会把它看作是性质或键的直接命名。 除了一个EL隐式对象(PageContext)外,其他EL隐式对象都是Map。从这些隐式对象可以得到任意4个作用域中的属性、请求参数值、首部值、 cookie值和上下文初始化参数。非映射的隐式对象是pageContext,它是PageContext对象的一个引用。 不要把隐式EL作用域对象(属性的Map)与属性所绑定的对象混为一谈。换句话说,不要把requestScope隐式对象与具体的JSP隐式对象 request混淆。访问请求对象只有一条路,这就是通过pageContext隐式对象来访问(不过,想从请求得到的一些东西通过其他EL隐式对象也可以得到,包括param/paramValues、header/headerValues和cookie)。 EL允许你调用一个普通Java类中的公共静态方法。函数名不一定与具体的方法名相匹配!例如,${foo:roolIt()}并不意味着包含函数的类中肯定有一个名为roolIt()的方法。 使用一个TLD将函数名(例如roolIt())映射到一个具体的静态方法。使用 EL和JSTL 主要内容 ?EL表达式 ?JSTL标签库 1.EL表达式 EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。在JSP页面中使用EL表达式,可以简化对变量和对象的访问。 EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。 EL表达式对运算符支持 使用EL表达式进行算术运算,在EL表达式中支持+、-、*、/、%运算,示例如下: 代码演示:EL表达式算术运算 <%@ page language="java" pageEncoding="UTF-8"%> 图1 EL表达式算术运算结果 在EL表达式中还可以支持关系运算符操作,示例如下: 代码演示:EL表达式关系运算符 EL表达式语法介绍
EL表达式
EL表达式与JSTL
12 * 15 = ${12*15}
12 - 15 = ${12-15}
12 / 15 = ${12/15}
12 % 15 = ${12%15}
12<15 ${12<15}
12>15 ${12>15}
12<=15 ${12<=15}
12>=15 ${12>=15}
12!=15 ${12!=15} EL表达式除了支持普通的关系运算符外,还可以使用字符来表示关系运算符,下面的写法和上面使用普通关系运算符表示的顺序一一对应: 代码演示:EL表达式关系运算符 12==15 ${12 eq 15}
12<15 ${12 lt 15}
12>15 ${12 gt 15}
12<=15 ${12 le 15}
12>=15 ${12 ge 15}
12!=15 ${12 ne 15}
EL表达式
EL: 简介: (Expression Language.) 作用:EL表达式存取变量数据。方便使用。 语法结构: ${ ……. } EL运算符: .与[] EL提供了.和[] 两个运算符存取数据 假设session变量为user的javaBean,有一个name属性,取值为${https://www.360docs.net/doc/8a10074987.html,} 或者${https://www.360docs.net/doc/8a10074987.html,er[“name”]} 算术运算符 有五个:+、-、*或$、/或dive、%或mod ${2+3} ${2/3}或${2 div 3} ${2%3}或${2 mod 3} 关系运算符 有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge ${5==5} ${5 eq 5} ${5 != 5} ${5 ne 5} 逻辑运算符 有三个:&&或and、||或or、!或not
${A &&B} ${A and B} ${A || B} ${!A} ${not A} 其它运算符 有三个:Empty运算符、条件运算符、()运算符 ${empty https://www.360docs.net/doc/8a10074987.html,}
${3+9 } ${5==5 } ${empty a } EL隐式对象: 1、与范围有关的隐式对象。 ●pageScope使用范围:当前页面 ●requestScope使用范围:当前请求 ●sessionScope使用范围:当前会话 ●applicationScope使用范围:服务器启动到结束 例子: <% pageContext.setAttribute("key","b"); request.setAttribute("key","c"); session.setAttribute("key","d"); application.setAttribute("key","e"); %> ${key } ${requestScope.key } ${sessionScope.key }el表达式的基本语法
·el表达式的基本语法 ${el表达式} 1) 第一种:访问bean的属性 a、${https://www.360docs.net/doc/8a10074987.html,} jsp引擎会依次从pageContext、request、session、application查找绑定名为"user" 的对象,如果找到了就不再向下查找,否则,继续向下查找。找到后。调用该对象的getName()方法,并输出 其值;找不到,则输出""(空)。 b、${user["name"]},效果相同 "name"表示字符串 c、或者也可以使用${user[propname]},注意不带引号表示变量 d、此外[]里面还可以以0 1这样的数字下标,作用是输出数组里面的元素值。 2)第二种:获取请求参数值 a、${https://www.360docs.net/doc/8a10074987.html,ername} 等价于request.getAttribute("username"); b、${paramValues.interest} 等价于request.getAttributeValues("interest"); 3)第四种:计算一个表达式,将结果作为标签的属性值或者直接输出。 a、算术运算+ -* % / 但是要注意的是+号不能连接字符串 b、关系运算== != < > >= <= 可以使用对应的"eq" "nq" "lt" "gt" "le" "ge" c、逻辑运算 && || ! 可以使用and or not d、empty运算 判断一个字符串是否为空,集合内容是否为空,以及绑定的对象是否存在 ·5核心标签的使用 1)使用步骤 需要将jstl标准标签库相关的jar文件copy到WEB-INF 的lib目录下 jstl.jar java stantard taglib stantard.jar 2)在件商品文件当中,使用taglib指令导入标签。 3)使用标签 a、
JSP中的EL表达式介绍
JSP 中的 EL 表达式介绍
一、JSP EL 语言定义
EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功 能。 脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码 的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。 JSP 2.0 将 EL 表达式添加为一种脚本编制元素。
二、JSP EL 简介 1、语法结构 ${expression} 2、[ ]与.运算符 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数 字的符号,就一定要使用“[ ]“。例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。 例如: ${https://www.360docs.net/doc/8a10074987.html,er[data]}中 data 是一个变量 3、变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是 取出某一范围中名称为 username 的变量。
因为我们并没有指定哪一个范围的 username,所以它会依序从 Pa ge、Request、Session、Application 范围查找。 假如途中找到 username,就直接回传,不再继续找下去,但是假 如全部的范围都没有找到时,就回传 null。 属性范围在 EL 中的名称 Page Request Session Application PageScope RequestScope SessionScope ApplicationScope
二、JSP EL 中的有效表达式 有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。 我们将分别了解这些有效表达式中的每一种: 1、文字 JSP 表达式语言定义可在表达式中使用的以下文字:
文字 Boolean true 和 false
文字的值
Integer
与 Java 类似。可以包含任何正数或负数,例如 24、-45、 567 与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
Floating Point
EL表达式教程
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构: ${https://www.360docs.net/doc/8a10074987.html,er.sex} 所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session 的范围中,取得 用户的性别。假若依照之前JSP Scriptlet的写法如下: User user = (User)session.getAttribute("user"); String sex = user.getSex( ); 两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。 一.与 [ ] 运算符 EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的: ${https://www.360docs.net/doc/8a10074987.html,er.sex}等于${https://www.360docs.net/doc/8a10074987.html,er["sex"]} . 和 [ ] 也可以同时混合使用,如下: ${sessionScope.shoppingCart[0].price} 回传结果为shoppingCart中第一项物品的价格。 不过,以下两种情况,两者会有差异: (1) 当要存取的属性名称中包含一些特殊字符,如. 或–等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name } 上述是不正确的方式,应当改为:${user["My-Name"] } (2) 我们来考虑下列情况: ${https://www.360docs.net/doc/8a10074987.html,er[data]} 此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${https://www.360docs.net/doc/8a10074987.html,er.sex}; 假若data 的值为"name"时,它就等于${https://www.360docs.net/doc/8a10074987.html,}。因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值。 二.EL 变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。
EL表达式、语法及运算
EL表达式 一、EL表达式的概念 EL表达式是为了便于获取数据而定义的一种语言,JSP 2.0之后才成为一种标准。下面的示例是一个简单的EL表达式: <%@ page contentType="text/html; charset=UTF-8"%>
${stuno + 1}二、EL表达式的基本语法 EL表达式的出现让Web的显示层发生了大的变革,EL表达式用于获取数据,在JSP 2.0之后成为一种标准,是由JSP 标准标签库专家组和JSP 2.0 专家组开发。 EL表达式的语法格式:${标识符}(必须以“${”开始,以“}”结束“标示符”具体表达式的内容) 在JSP页面中使用的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为“”(注意,不是null)。 三、语法结构 1、JSP EL用于以下情形 静态文本 标准标签和自定义标签(可以作为元素的值,也可以在自定义或者标准动作元素的内容中使用) EL不能在脚本元素中使用 2、[]与.运算符
EL提供(.)和([])两种运算符来存取数据,即使用点运算符(.)和方括号运算符([])。 点运算符和方括号运算符可以实现某种程度的互换,如${https://www.360docs.net/doc/8a10074987.html,}等价于${student [“name”]}。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号时,就一定要使用[]。例如${https://www.360docs.net/doc/8a10074987.html, }应当改为${student[“name”] }。 如果要动态取值,就可以用[]来做,而.无法做到动态取值。例如${sessionScope.student[data]}中data 是一个变量。 3、变量 EL存取变量时间的方法很简单,例如${username}。它的意思是取出某一范围中名称为username 的变量。 属性范围在EL中的名称如表所示: 4、文字常量 一个EL表达式包含变量、文字常量、操作符。文字常量主要包括字符串、数字和布尔值、还有NULL,其中 字符串是由任何由单引号或双引号引起来的一串字符。 数字常量包括整型、浮点型,整型表示十进制、十六进制和八进制类型的值,浮点型与Java类似,可以包含任何正的或者负的浮点数。 布尔型包括true和false。 ${true} ${10} ${10.5f} ${“hello”} ${null} 5、操作符 EL表达式的操作符主要有
EL表达式常用标签
EL表达式和常用标签 1.el表达式的作用,什么时候使用el表达式 El表达式是为了简化jsp页面中的java代码,当在jsp页面中需要使用java代码的时候,可以使用el表达式来替换java代码 2.语法规则${ } 3.El表达式在request,session,application中的自动匹配范围最小的那一个 例如: request.setAttribute("name","mzl"); session.setAttribute("name","liu"); application.setAttribute("name","huyahui"); El: 获得attribute里面的值${name} 4.获取请求头的信息 获得全部请求信息${header }
获得cookie ${header.cookie }
获得cookie的第二种方式${header['cookie'] } 5.获取请求参数 6.获取作用于的数据 request.setAttribute("name","mzl"); session.setAttribute("name","liu"); application.setAttribute("name","huyahui"); El 获得request里面的值${https://www.360docs.net/doc/8a10074987.html,}
获得session里面的值${https://www.360docs.net/doc/8a10074987.html,}
获得application里面的值${https://www.360docs.net/doc/8a10074987.html,}
7.获取列表的数据 ArrayList list = new ArrayList(); list.add("zcxv"); list.add("adf"); list.add("asdf"); request.setAttribute("list",list); Map map = new HashMap(); map.put("01","adf"); map.put("02","zcv"); request.setAttribute("map",map); El 下标的方式进行访问集合${list[0]}
${list[1]}
${list[2]}
访问map里面的值:${map['01'] }
${map['02'] }
8.获取pojo对象的值 User user = new User(01,"123"); request.setAttribute("user",user); El 访问pojo里面的值
${user.id }
${https://www.360docs.net/doc/8a10074987.html, } 9.El表达式能够进行简单的计算 10.Jsp常用的标签库 动态循环输出数据到页面 User user = null; ArrayList list = new ArrayList(); for(int i=1;i<10;i++){ user = new User(i, "user" + i); list.add(user); } request.setAttribute("users",list);
EL表达式 (详解)
EL表达式 1 EL简介 1 语法结构 ${expression} 2 [] .运算符 EL 提供.和[]两种运算符来 取数据 当要 取的属性 称中包含一些特殊 符 如.或?等并非 母或数 的符号 就一定要使用[] 例如 ${user.My-Name}应当改 ${user["My-Name"] } 如果要动态取值时 就可 用[]来做 而.无法做到动态取值 例如 ${https://www.360docs.net/doc/8a10074987.html,er[data]}中data 是一个变量 3 变量 EL 取变量数据的方法很简单 例如 ${username} 它的意思是取出某一范围中 称 username的变量 因 们并没有指定哪一个范围的username 所 它会依序从Page Request Session Application范围查找 假如途中找到username 就直接回传 再继续找 去 但是假如全部的范围都没有找到时 就回传null 属性范围在EL中的 称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope 4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是 替JSP页面中复杂的JAVA 码. 2--EL表达式可操作常量变量和隐式对象. 最常用的隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个 符串的值. ${paramValues}表示返回请求参数的一组
值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话 范围内的变量.applicationScope表示应用范围的变量. 3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁 止.FALSE表示 禁 止.JSP2.0中默认的启用EL语言. 4-- EL语言可显示逻辑表达式如${true and false}结果是false 关系表达式如${5>6} 结 果是false 算术表达式如${5+5} 结果是10 5--EL中的变量搜索范围是:page request session application 点运算符(.)和"[ ]"都是 表示获取变量的值. 别是[ ]可 显示非词类的变量 2 EL隐含对象 1) 范围有关的隐含对象 范围有关的EL 隐含对象包含 四个 pageScope requestScope sessionScope 和 applicationScope 它们基本 就和JSP的pageContext request session和application一样 在EL中 这四个隐含对象只能用来取得范围属性值 getAttribute(String name) 能取得 他相关信息 例如 们要取得session中储 一个属性username的值 可 利用 列方法 session.getAttribute("username") 取得username的值 在EL中则使用 列方法 ${https://www.360docs.net/doc/8a10074987.html,ername} 2) 输入有关的隐含对象 输入有关的隐含对象有两个 param和paramValues 它们是EL中比较特别的隐含对象 例如 们要取得用户的请求参数时 可 利用 列方法 request.getParameter(String name) request.getParameterValues(String name) 在EL中则可 使用param和paramValues两者来取得数据 ${https://www.360docs.net/doc/8a10074987.html,} ${https://www.360docs.net/doc/8a10074987.html,}
EL表达式实验
Java web应用编程基础实验报告 实验7:EL表达式实验 一、实验目的 ●熟悉与初步掌握EL表达式的使用,并认识使用EL表达式可增强程序的可读性与可 维护性。 二、实验要求 ●掌握EL的基本语法、运算符及隐含对象相关知识,使用专业开发工具MyEclipse 编程。 ●上交实验报告电子文档(文档包含源程序,以班级、学号、姓名依次出现组成的 字符串标识文档,以班级为单位上交)。 三、实验内容 1、在客户端的表单中填写用户注册信息并提交后,应用EL表达式通过访问JavaBean的属性的方法将用户信息显示到页面上。 2、编写程序示例,实现投票功能并应用EL表达式显示投票结果。 四、实验过程中遇到的问题及解决手段 五、程序源代码 package com.bean; public class UserFrom { private String username; public String getUsername() { return username; } public void setUsername(String username) { https://www.360docs.net/doc/8a10074987.html,ername = username; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getSex() { return sex; } public void setSex(String sex) {
this.sex = sex; } public String[] getAffect() { return affect; } public void setAffect(String[] affect) { this.affect = affect; } private String pwd; private String sex; private String[] affect = null; } <%@page language="java"import="java.util.*"pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServer Port()+path+"/"; %>