code094.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL表达式</title>
</head>
<body>
<%-- JSP页面java代码方式 --%>
<%
if(session.getAttribute("userName") != null)
{
out.println(session.getAttribute("userName").toString());
}
%>
<br>
<%-- EL表达式,更简洁 --%>
${userName}
<br>
<%-- 由于EL表达式的语法以$开头,所以如果在JSP页面中要显示$开头字符串,请在前面加上反斜杠 --%>
\${userName}
<br>
<%-- 在EL表达式中,要输出一个字符串,可以将字符串放在一对单引号或双引号内 --%>
${'虾米大王'}
${"虾米大王"}
<br>
<%-- 如果想通过EL输入两个字符串数值的和,可以直接通过+号连接 --%>
${number1 + number2}
<br>
<%-- 在低版本的环境兼容,需要禁用EL --%>
<%-- 方式一,使用反斜杠 --%>
\${expression}
\${number}
<%-- 方式二,使用page指令,ture为忽略EL --%>
<%@ page isELIgnored="false" %>
<%-- 方式三,在tomcat服务器的web.xml中配置 ignored 元素 --%>
<%--
以下为模拟代码,去除了尖括号
jsp-config
jsp-property-group
url-pattern *.jsp /url-pattern
el-ignored true /el-ignored
/jsp-property-group
/jsp-config
--%>
<%--
EL的保留关键
and
eq
gt
instanceof
div
or
le
false
empty
not
It
ge
--%>
<%--
一下是在EL中运算符号的优先级 ,由高到低
[] .
()
-(负号) not ! empey
* / div % mod
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
? :
--%>
<br>
<%--
通过EL提供的 [] 和 . 运算符可以访问数据
--%>
${userInfo.id}
${userInfo[id]}
<%--
通过 [] 运算符可以获取数组的指定元素 .运算符不能
获取request范围中的数组arrBook的第一个元素
--%>
${arrBook[0]}
<%--
在EL中进行算术运算
+ 加 ${19+1} 20
- 减 ${66-30} 36
* 乘 ${52.1*10} 521.0
/ 除 ${5/2} 2.5
div 除 ${9 div 0} Infinity
% 求余 ${17%3} 2
mod 求余 ${15 mod 0} 抛出异常
--%>
<%--
在EL中判断对象是否为空
${empty expression}
--%>
<% request.setAttribute("user02", " "); %>
<% request.setAttribute("user03", null); %>
${empty user02}<br>
${empty user03}<br>
<%--
在EL中,提供了6种关系运算符。
== 等于 ${10 == 10} true
eq 等于 ${10 eq 10} true
!= 不等 ${10 != 10} false
ne 不等 ${10 ne 10} false
< 小于 ${7 < 6} false
lt 小于 ${7 lt 6} false
> 大于 ${7 > 6} true
gt 大于 ${7 gt 6} true
<= 小于等于 ${7 <= 6} false
le 小于等于 ${7 le 6} false
>= 大于等于 ${7 >= 6} true
ge 大于等于 ${7 ge 6} true
--%>
<%--
在EL中,提供的逻辑运算符
&& 与 ${true && false} false
and 与 ${true and false} false
|| 或 ${true || false} true
or 或 ${true or false} true
! 非 ${!true} false
not 非 ${not true} false
--%>
<%--
EL的隐含对象
提供了11个隐含对象,这些对象类似于JSP内置对象,
除PageContext是javaBean对象,对应于javax.servlet.jsp.PageContext类型外,
其他的隐含对象都对应于java.util.Map类型。
页面上下文对象pageContext
${pageContext.request}
${pageContext.request.serverPort} //返回8080
${pageContext.response}
${pageContext.response.contentType} //返回 text/html;charset=utf-8
${pageContext.out}
${pageContext.out.bufferSize} //返回8192
${pageContext.session}
${pageContext.session.maxInactiveInterval} //返回 1800秒
${pageContext.exception}
${pageContext.exception.message} // 返回异常信息
${pageContext.page}
${pageContext.page.class} // 返回 class org.apache.jsp.index_jsp
${pageContext.servletContext}
${pageContext.servletContext.contextPath} // 返回 路径
--%>
<%--
访问作用域范围的隐含对象
即pageScope、requestScope、sessionScope、applicationScope。
--%>
<%--
在EL中,提供了6个访问环境信息的隐含对象。
param对象
在JSP页面中放置一个文本框
<input type="text" name="name">
提交表单后
${param.name}
如果文本框中输入中文,请在使用EL前,
request.setCharacterEncoding("uft-8");
paramValues对象
在JSP页面中,放置一个复选框组
<input type="checkbox" name="affect" value="游泳">
<input type="checkbox" name="affect" value="跑步">
表单提交后,
request.setCharacterEncoding("utf-8");
${paramValues.affect[0]}
${paramValues.affect[1]}
在应用param和paramValues时,如果指定参数不存在,返回空串,不是null
header对象
用于获取HTTP请求的header的值,有多个不同的值时,就使用
headerValues对象。
${header.connection}
${header["connection"]}
${header["user-agent"]}
initParam对象
用于获取web应用初始化参数的值
在tomcat服务器的web.xml文件中设置一个初始参数
<context-param>
<param-name>author</param-name>
<param-value>lucy</param-value>
</context-param>
${initParam.author}
cookie对象
在EL中,没有提供cookie保存值的方法,但是提供了访问由请求
设置的cookie的方法,
如果cookie中已经设定了一个username的值,可以通过
${cookie.username}来获取cookie对象。
要获取cookie的值,可以通过cookie对象的value属性。
定义和使用EL函数
一共3步骤
1、编写一个java类,并在该类中编写公用的静态方法,用于
实现自定义EL函数的功能。
2、编写标签库描述文件,对函数声明。文件扩展名为.tld,
保存在web应用的WEB-INF文件夹下。
3、在JSP页面中引用标签库,并调用自定义的EL函数,实现功能。
在定义和使用EL函数时常见的错误有3种:
1、没有指定完整的类型名而异常
解决方法是:在扩展名为.tld的文件中指定完整的类型名,如java.lang.String
2、在标签库的描述文件中输入了错误的标记而异常
如,<function-signature>错写为<function-signatrue>。
3、定义的方法不是静态方法而异常
解决方法是:修改方法为static。
--%>
</body>
</html>