文章目录
- 一、什么是EL表达式
- 1、命令格式:${作用域对象别名.共享数据}
- 二、EL表达式与作用域对象别名
- 1、JSP文件可以使用的作用域对象
- 2、EL表达式提供作用域对象别名
- 3、EL表达式将引用对象属性写入到响应体
- 4、EL表达式简化版
- 三、EL表达式与运算表达式
- 四、EL表达式提供内置对象
- 1、命令格式:${param.请求参数名}
- 2、命令格式:${paramvalue.请求参数名[下标]}
一、什么是EL表达式
EL表达式,全称为Expression Language,意为表达式语言。它是Servlet规范中的一部分,也是JSP2.0规范加入的内容。EL表达式的主要作用是用于在Java Web应用中访问和操作数据,使得JSP页面能够摆脱Java代码块和JSP表达式,实现代码的简化。
EL表达式的语法格式使用${}
包裹,其中${}
内部可以是一个表达式或者变量名。其主要用于在页面中获取和展示数据,执行算术运算,访问JavaBean属性,以及调用JavaBean方法等。此外,EL表达式定义了一些隐式对象,使得web开发人员可以轻松地获取对web常用对象的引用,并获取这些对象中的数据。
EL表达式为Java Web开发提供了一种更为简洁、高效的方式来处理数据和逻辑,使得开发过程更加便捷。
1、命令格式:${作用域对象别名.共享数据}
- EL表达式是式工具包提供一种特殊命令格式
表达式命令格式
。 - EL表达式在JSP文件上使用。
- 负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体。
二、EL表达式与作用域对象别名
1、JSP文件可以使用的作用域对象
- ServletContext application:全局作用域对象;
- HttpSession session:会话作用域对象;
- HttpServletRequest request:请求作用域对象;
- PageContext pageContext:当前页作用域对象;
这是JSP文件独有作用域对象。Servlet中不存在在当前页作用域对象存放的共享数据。仅能在当前JSP文件中使用,不能共享给其他servlet或则其他JSP文件。
真实开发过程,主要用于JSTL标签与JSP文件之间数据共享数据。
JSTL ------> pageContext ----> JSP
2、EL表达式提供作用域对象别名
- JSP------------------------------EL表达式
- application---------------------${applicationscope.共享数据名}
- session-------------------------${sessionscope.共享数据名}
- request-------------------------${requestscope.共享数据名}
- pageContext------------------${pagescope.共享数据名}
3、EL表达式将引用对象属性写入到响应体
- 命令格式:
${作用域对象别名.共享数据名.属性名}
。 - 命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体。
- 属性名:一定要去引用类型属性名完全一致(大小写)。
- EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出。
4、EL表达式简化版
1、命令格式:${共享数据名}
2、命令作用:EL表达式允许开发人员开发时省略作用域对象别名
3、工作原理:
- EL表达式简化版由于没有指定作用域对象,所以在执行时采用
猜
算法。 - 首先到
pageContext
定位共享数据,如果存在直接读取输出并结束执行。 - 如果在
pageContext
没有定位成功,到request
定位共享数据,如果存在直接读取输出并结束执行。 - 如果在
request
没有定位成功,到session
定位共享数据,如果存在直接读取输出并结束执行。 - 如果在
session
没有定位成功,到application
定位共享数据,如果存在直接读取输出并结束执行。 - 如果在
application
没有定位成功,返回null
pageContext—>request—>session—>applicationl
4、存在隐患: 容易降低程序执行速度,容易导致数据定位错误。
5、设计目的,就是简化从pageContext读取共享数据并输出难度。
6、EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版。
三、EL表达式与运算表达式
1、前提:在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体;
2、运算表达式:
- 数学运算。
- 关系运算:> >= == < <= !=
- gt ge eq lt le !=
- 逻辑运算:&& ll !
四、EL表达式提供内置对象
EL表达式提供了一系列内置对象,这些对象在无需创建的情况下即可直接使用,它们与Map相似。
- pageScope:这是一个
Map<String,Object>
类型的对象。通过${pageScope.xxx}
,可以获取在pageContext中保存的数据。与pageContext.getAttribute(“xxx”)
功能相同,但在数据不存在时,前者返回空字符串,而后者返回null。 - header:此对象用于获取请求头中的值。例如,使用
${header['User-Agent']}
可以获取User-Agent请求头的值。 - initParam:这个对象可以获得在web.xml中配置的
<context-param>
中的值。例如,如果在web.xml中配置了一个名为name的context-param,其值为tom,那么通过${initParam.name}
就可以得到tom。 - cookie:这个对象用于获取cookie的值。例如,通过
${cookie.JSESSIONID.value}
可以获取名为JSESSIONID的cookie的值。同时,也可以通过${cookie.username.maxAge}
获取cookie的生存时间。、 - fn:fn对象提供了一些常用的函数,可以方便地进行字符串处理、类型转换、日期处理等。
- pageContext:在EL表达式中,pageContext与JSP内置对象中的pageContext是同一个对象。通过这个对象,可以获取到request、response、session、servletContext、servletConfig等对象。在EL中,这些对象不是内置对象,但可以通过pageContext获取。例如,
${pageContext.request}
可以获取request对象。
除了上述对象外,还有requestScope、sessionScope和applicationScope等对象,它们分别对应不同的域(scope),可以用来获取不同域中的属性值。
EL表达式的内置对象提供了丰富的功能,使得在JSP页面中可以方便地访问和操作各种数据。
1、命令格式:${param.请求参数名}
从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。
代替命令:index.jsp
发送请求:Http://localhost:8080/myweb/index.jsp?userName=mike&password=123
<%string userName = request.getParameter ( "userName" ) ;string password =request.getParameter ( "password");%><%=userName%><%=password%>
2、命令格式:${paramvalue.请求参数名[下标]}
如果浏览器发送的请求参数是一个请求参数关联多个值,此时可以通过paramvaues读取请求参数下指定位置的值并写入到响应体。
代替命令:http://localhost:8080/myweb/index2.jsp?pageNo=1&pageNo=2&pagNo=3
,此时pageNo请求参数在请求包以数组形式存在,pageNo: [1,2,3]
。
<%string array[] = request.getParametervalues ( "pageNo");%>第一个值:<%=array [0]%>第二个值:<%=array [1]%>