第十一章 表达式语言EL和标准标签库JSTL
- 格式:doc
- 大小:356.51 KB
- 文档页数:8
EL语⾔表达式(⼀)【语法和特点】
⼀、基本语法规则:
EL表达式语⾔以“${”开头,以"}"结尾的程序段,具体格式如下:
${expression}
其中expression:表⽰要指定输出的内容和字符串以及EL运算符组成的表达式。
⼆、EL语⾔表达式的特点:
(1)EL语法简单,⽅便
(2)EL可以与JSTL结合使⽤,也可以和JavaScript语句结合使⽤。
(3)EL可以⾃动转换类型。
(4)EL既可以访问⼀般的变量,也可以访问JavaBean中的属性和嵌套属性、集合对象。
(5)EL中可以执⾏算术运算、逻辑运算、关系运算和条件运算等。
(6)EL中可以获得命名空间(PageContext对象,他是页⾯中所有其他内置对象的最⼤范围的集成对象,通过它可以访问其他内置对象)。
(7)EL中在进⾏除法运算时,如果除数是0,则返回⽆穷⼤Infinity,⽽不返回错误。
(8)EL中可以访问JSP的作⽤域(request、session、application以及page)
(9)扩展函数可以与Java类的静态⽅法进⾏映射。
三、EL中保留的关键字
and eq gt
instanceof div or
le false empty
not lt ge。
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)。
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。
在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。
JSTL标签库可分为5类:❑核心标签库❑I18N格式化标签库❑SQL标签库❑XML标签库❑函数标签库本章将对这些内容一一讲述。
9.1 核心标签库JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。
使用这些标签能够完成JSP页面的基本功能,减少编码工作。
(1)表达式控制标签:out标签、set标签、remove标签、catch标签。
(2)流程控制标签:if标签、choose标签、when标签、otherwise标签。
(3)循环标签:forEach标签、forTokens标签。
(4)URL操作标签:import标签、url标签、redirect标签。
在JSP页面引入核心标签库的代码为:<%@ taglib prefix="c" uri="/jsp/jstl/core" %>下面将按照功能分类,分别讲解每个标签的功能和使用方式。
9.2.1 表达式控制标签表达式控制分类中包括<c:out>、<c:set>、<c:remove>、<c:chtch>4个标签,现在分别介绍它们的功能和语法。
1.<c:out>标签【功能】:用来显示数据对象(字符串、表达式)的内容或结果。
在使用Java脚本输出时常使用的方式为:<% out.println(“字符串”)%><%=表达式%>在web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用<c:out>标签就可以实现以上功能。
菜鸟教程el表达式EL表达式是JavaServer Pages(JSP)技术中的一种表达式语言,它可以在JSP页面中嵌入Java代码,实现动态数据的显示和处理。
EL表达式的语法简单易懂,使用方便,是JSP开发中不可或缺的一部分。
EL表达式的语法格式为${expression},其中expression是一个表达式,可以是变量、方法、属性等。
EL表达式可以用于获取请求参数、访问JavaBean属性、调用JavaBean方法等操作。
例如,${ername}可以获取请求参数中名为“username”的值,${}可以获取名为“user”的JavaBean的name属性值。
EL表达式还支持运算符和函数,可以进行算术运算、逻辑运算、比较运算等操作。
例如,${1+2}可以计算1+2的值,${empty list}可以判断list是否为空,${fn:length(list)}可以调用函数fn:length获取list的长度。
EL表达式的优点在于它可以简化JSP页面的代码,使页面更加清晰、易于维护。
使用EL表达式可以避免在JSP页面中编写大量的Java代码,减少代码量,提高开发效率。
此外,EL表达式还可以与JSTL标签库一起使用,实现更加强大的功能。
EL表达式的缺点在于它可能会导致安全问题。
由于EL表达式可以访问JavaBean的属性和方法,如果不加以限制,可能会导致恶意用户获取敏感信息或执行恶意代码。
因此,在使用EL表达式时,需要注意安全问题,对访问权限进行限制,避免安全漏洞的出现。
EL表达式是JSP开发中不可或缺的一部分,它可以简化代码、提高开发效率,但也需要注意安全问题。
在实际开发中,需要根据具体情况选择合适的EL表达式使用方式,确保代码的安全性和可维护性。
计算机技术与工程系《网络应用程序开发(Java)》课程教学大纲(统招专科)适用专业:软件技术计算机网络技术计算机应用技术二○一一年二月《网络应用程序开发(Java)》课程教学大纲一、课程基本信息二、课程内容及基本要求第一章:JSP概述课程内容:1、JSP技术概述:(1)Java语言;(2)Servlet技术;(3)JavaBean技术;(4)JSP技术。
2、JSP技术特征。
3、JSP的处理过程。
4、JSP与其他服务器端脚本语言的比较。
5、JSP开发环境搭建:JSP的运行环境;JDK的安装与配置;Tomcat的安装与启动。
6、JSP开发工具。
7、JSP程序开发模式:(1)单纯的JSP页面编程;(2)JSP+JavaBean编程;(3)JSP+Servlet+JavaBean编程;(4)MVC模式。
8、第一个JSP应用基本要求:1、掌握JSP技术特征;JSP的处理过程;JSP开发环境搭建;简单的JSP 文件的开发。
2、理解ASP、PHP和JSP的异同。
3、了解JSP开发工具;JSP程序开发的几种模式。
本章重点: JSP技术特征;JSP开发环境搭建;简单的JSP文件的开发。
本章难点:JSP开发环境搭建。
第二章:JSP开发基础课程内容:1、Java语言基础:基本数据类型及基本数据类型间的转换;常量与变量;运算符的应用;流程控制语句;数组的创建与应用。
2、JavaScript脚本语言;在JSP中引入JavaScript;JavaScript的数据类型与运算符;JavaScript的流程控制语句;函数的定义和调用;事件;JavaScript 常用对象的应用。
基本要求:1、掌握Java语言基础,包括基本数据类型及基本数据类型间的转换,运算符的应用,流程控制语句,数组的创建与应用等。
2、掌握JavaScript脚本语言基础知识,包括JavaScript的数据类型与运算符,JavaScript的流程控制语句,函数的定义和调用,JavaScript常用对象的应用等。
aop el表达式AOP(面向切面编程)是一种面向对象编程的重要手段,常常用于实现系统的复杂业务逻辑和前置、后置处理。
而EL表达式(表达式语言)则是为了简化JSP页面中JSTL表达式以及Struts2框架中的OGNL表达式而生的一种简单而强大的表达式语言。
AOP和EL表达式都在现代开发中扮演着不可或缺的角色,通过了解AOP和EL表达式,我们可以更好地提高我们的开发效率,下面就为大家介绍一下关于AOP EL表达式的相关知识。
1. AOP概述AOP是一种不同于OOP的编程范式,它利用了OOP中的封装、继承、多态等特性,同时也强调了代码的切面性,这就是其名称“面向切面编程”的由来。
AOP的思想是,将系统中的一些特定行为(例如日志、事务、安全控制等)从具体业务逻辑中解耦出来,通过特殊的机制引入系统中去,从而达到增强系统可维护性和灵活性运作的目的,可以说AOP是OOP的一个有力补充和支持。
目前,JavaSpring框架就是一种基于AOP思想的设计,它利用AspectJ等机制来实现对代码切面的管理、控制和维护。
2. EL表达式概述EL表达式是表达式语言,它是为了简化JSP页面中JSTL表达式以及Struts2框架中的OGNL表达式而设计的,可以将JavaBean的属性通过特定的语法而在表达式中得以使用。
EL表达式非常简单易懂,例如${variable}就是一个EL表达式,它会将JavaBean中的“variable”属性表现到页面的文本内容中。
3. 合并AOP和EL表达式在JavaSpring框架中,我们可以在AOP的拦截器中通过EL表达式来引用特定的JavaBean的属性,从而实现更灵活、动态的系统设计和实现。
例如,我们可以在Spring配置文件中通过如下代码来定义一个基于EL表达式的前置通知:<aop:aspectj-autoproxy /><bean id="myAspect" class="example.MyAspect" /><aop:config><aop:aspect id="log" ref="myAspect"><aop:before method="before" pointcut="execution(*\*.do*(..))"arg-names="param1,param2"expression="#param1 eq'admin'and#param2 eq'123456'"></aop:before></aop:aspect></aop:config>这段代码的效果是,当执行do系列方法时,检查参数列表中的第1个和第2个参数是否分别为“admin”和“123456”,如果满足条件,则执行MyAspect类中定义的before()方法,均不满足则不执行before()方法。
EL表达式就是用表达式语言jsp的动作标签本身就属于jsp规范的一部在页面中使用表达的目的是从各种域中取强调一点,能够被el表达取值的对象事先自动类型转换指的是可以所任意类型都转自动类型转换也包括在构造表达式时的类-1person["name-1"],提供自动类型转换的功能。
的属性:${sessionScope.shoppingCart[0].price}ser”);String name=user.getName();. 和 –等并非字母或数字的符号,就一定要此为动态取值),从各种类型的web 域中检索java 对象、获或获取数组、Collection 、Map 类型集合的数轻松迭代各种类型的数组或集合,示例:迭代map 类型集合运算、逻辑运算和算术运算,以在JSP 页面中隐含对象名称开发人员可以很轻松获得对web常用对象的pageContextpageScoperequestScopesessionScopeapplicationScopeparamparamValuesheaderheaderValuescookieinitParam是用表达式语言所构成的在jsp页面中可以被解释执行的表达式签本身就属于jsp规范的一部分,EL表达式也一样是jsp规范的一部分。
Struts框架加也提供了类似的表达式ognl表达式,如果用表达的目的是从各种域中取出相应的对象,再取出对象中的属性值,另外一方面,就是它也可以来构造常用的算术,关系,能够被el表达取值的对象事先一定要在某个域中存在,否则无法操作。
换指的是可以所任意类型都转换成字符串,因为取出的值多半都需要作为页面的输出。
换也包括在构造表达式时的类型转换,字符串可以转换成数字写起来很方便它解决了属性名中有特殊符号的问题描 述对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。
)代表page域中用于保存属性的Map对象代表request域中用于保存属性的Map对象代表session域中用于保存属性的Map对象代表application域中用于保存属性的Map对象表示一个保存了所有请求参数的Map对象表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]表示一个保存了所有http请求头字段的Map对象同上,返回string[]数组。
本章目标 熟悉EL的基本用法 熟悉JSTL的常用标记 能编写简单的自定义标签 本章考核 用JSTL和EL实现MVC的查询分页功能 用自定义标签实现分页工具条 知识点1:EL Expression Language 以${起始、以}结尾 ,例如${sessionScope.user.sex} EL语法比传统jsp语法简洁,方便 1.1、.和[]运算符 ${sessionScope.user.sex}和${sessionScope.user["sex"]} 可以混合使用 在以下两种情况下,这两种表示方法是有差异的 当属性名称中存在特殊字符,如.或者-就要使用[] 例如:${sessionScope.user["my-name"]} 如果动态取值,例如${sessionScopt.user[data]} 此时data是个变量 1.2、EL变量 ${变量名} 变量自动搜索顺序 属性范围 在EL中的隐含对象名称 Page pageScope Request requestScope Session sessionScope Application applicationScope 1.3、自动类型转换 ${param.count+20} 等价于 String strCount = request.getParameter("count"); int count = Integer.parseInt(strCount); count = count+20; 1.4、EL保留字 【and、or、no、instanceof 】 【 eq、ne、lt、empty 】【 gt、le、ge、div】 【true、false、null、mod】 1.5、EL隐含对象 pageContext、pageScope、requestScope、sessionScope、applicationScope、 Param【request.getParameter】、paramValues、header、headerValues、cookie、initParam【ServletContext.getInitParameter】 ${pageContext}的常用部分 ${pageContext.request.queryString} 请求参数字符串
${pageContext.request.requestUrl} 取得请求的URL
${pageContext.request.contextPath} 取得web应用的名称
${pageContext.request.method} 取得请求方式post、get
${pageContext.request.protocol} 请求的Http协议(HTTP/1.1 HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr} 取得用户的ip地址
${pageContext.session.new} 判断session是否为新的
${pageContext.session.id} 取得session的id
${param.username} ${param.sex} 兴趣 ${s}
用户名:张三 性别:男 兴趣:旅游、阅读、影视 学历:高中
1.6、EL算术运算符 + - * /或div %或mod 1.7、EL关系运算符==或eq 、!=或ne、或gt、<=或le、>=或ge 1.8、EL逻辑运算符 &&或and ||或or !或not 1.9、EL其他运算符 empty判断是否为空${empty param.username} ${A?B:C} ${empty param.pcode?1:param.pcode} ()优先权 1.10、EL自定义函数
知识点2:JSTL javaServet Pages Standard Tag Library主要提供给javaweb开发人员一个标准通用的标签函数库 Web程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入java程序代码段的做法,以提高程序可读性、维护性和方便性 JSTL五大标签函数库 1、核心标签库 2、L18N格式标签库 3、SQL标签库 4、XML标签库 5、函数标签库 在jsp页面中使用<%@taglib uri="" prefix=""/>引入JSTL标签库 如果没有声明指令,将无法使用JSTL的核心标签库的功
另外JSTL也支持EL语法:
Jsp语法:<%=messagelist.getMessage().getContent%> 传统JSTL: JSTL搭配EL 引入标签库的方式:新建webproject的时候,选择J2EE4下的AddJSTL复选框 2.1、核心标签库(c标签) 组成:基本输入输出、流程控制、迭代操作和Url操作 分类 功能分类 标签名称 core 表达式操作 out、set、remove、catch
流程控制 if、 choose、when、otherwise 迭代操作 forEach、forTokens URL操作 import、param、url、redirect 2.1.1、 显示数据的内容,就像是<%=%>一样 语法: 注:EL项为Y表示该属性的内容可以使用EL表达式,写成attribute="${表达式}",N则反之 范例: 2.1.2、将变量的存储到JSP范围或javaBean的属性中 语法:[scope="{page|request|session|application}var变量的jsp范围"]/> 范例:将2存储在request范围内 假若number为null,则移出request范围的变量number 假若username为空,则赋值null给username 2.1.3、 你好Admin先生 执行结果为${condition} 2.1.4、本身只当做和的父标签 语法:本体内容(和) 2.1.5、可以将集合中的成员一次浏览一遍 语法1:迭代一集合对象之所有成员 本体内容 语法2:迭代指定次数 本体内容 varStatus属性 Index:当前成员的索引序号0开始 Count:已经循环过的成员总数从1开始 First:是否第一个成员、last:是否最后一个成员 范例一:循环List 范例二:循环Map