1. EL简介
EL,Expression Lanauage,原本是JSTL1.0中方便存取数据所定义的语言。当时只能在JSTL标签中使用。如
<c:out value="${3+7}">。
到了JSP2.0以后,EL被正式纳入标准规范之一。因此,要在jsp页面中直接使用EL,容器必须是至少支持Servlet2.4/JSP2.0的,而如Tomcat4.1.29,只支持servlet2.3/JSP1.2,所以不能在jsp页面中直接使用EL。
2. EL语法
2.1 运算符--.和[]
${sessionScope.user.sex}
${sessionScope.user["sex"]}
相当于:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
需要注意的两点:
1. 当属性名称中有特殊字符,如“_”时,必须使用[].
${sessionScope.user.my_name}不正确,应改为$(sessionScope.user["my_name"]);
2. 使用变量时,必须使用[].
${sessionScope.user[data]}. data="name"时,相当于${sessionScope.user["name"]}.但不能使用${sessionScope.user.data}.
3. 关系运算符,使用${param.password1 == param.password2},不能写成${param.password1} == ${param.password2}
4. ${empty param.username} = ${param.username == null}判断是否为空或为null。
2.2 变量
$(username)
没有指定范围的时候,会依次在Request,session,Application中查找username,找到就返回不再继续;否则返回null
2.3 自动类型转换
${param.count+10}
相当于:
String str = request.getParamter("count");
int count = Integer.ParseInt(str);
count = count + 10;
2.4 隐含对象
a. 范围相关:pageScore,requestScore,sessionScore,applicationScore
这4个隐含对象只能用来取得范围属性值,也就是getAttribute(String name),不能取得其他信息比如请求参数或表头信息等。
b. 输入相关:param,paramValues
${param.name} = request.getParameter(String name)
${paramValues} = request.getParameterValues(String name),获取复选框值的时候使用。eg:${paramValues.habit[0]},${paramValues.habit[1]}
<fmt:questEncoding value="GB2312" /> = request.setCharacterEncoding("GB2312")
c. 其他: cookie,header,headerValues,initParam,pageContext
c1. cookie以key、value的方式将sessionTracking中的内容记录在一个文本文件中。从cookie中获取值,${cookie.username}
c2. header存储用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件。包括用户浏览器的版本,用户计算机的区域等相关数据。eg:${header["User-Agent"]}获取用户浏览器版本.同一标头有不同值的话,使用headerValues来获取
c3. ${initParam.userid} 从web.xml中设定的值,相当于String userid=(String)application.getInitParameter("userid");
l<context-param>
l<param-name>userid</param-name>
l<param-value>mike</param-value>
l</context-param>
l
c4. 使用${pageContext}获取其他有关用户要求或页面的信息
${pageContext.request.queryString}:获取请求的参数字符串
${pageContext.request.requestURL}:获取请求的URL,但不包含请求的参数字符串
${pageContext.request.contextPath}:服务的web application名称