EL(表达式语言) 1、EL概述 EL是JSP内置的表达式语言! * jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本! * EL替代的是<%= ... %>,也就是说,EL只能做输出! 1.1、EL的作用 JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。 JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %> 1.2、EL的格式 格式:${…} 例如:${1 + 2} 1.3、关闭EL 如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。 如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。 1.4、EL运算符
运算符 |
说明 |
范例 |
结果 |
+ |
加 |
${17+5} |
22 |
- |
减 |
${17-5} |
12 |
* |
乘 |
${17*5} |
85 |
/或div |
除 |
${17/5}或${17 div 5} |
3 |
%或mod |
取余 |
${17%5}或${17 mod 5} |
2 |
==或eq |
等于 |
${5==5}或${5 eq 5} |
true |
!=或ne |
不等于 |
${5!=5}或${5 ne 5} |
false |
<或lt |
小于 |
${3<5}或${3 lt 5} |
true |
>或gt |
大于 |
${3>5}或${3 gt 5} |
false |
<=或le |
小于等于 |
${3<=5}或${3 le 5} |
true |
>=或ge |
大于等于 |
${3>=5}或${3 ge 5} |
false |
&&或and |
并且 |
${true&&false}或${true and false} |
false |
!或not |
非 |
${!true}或${not true} |
false |
||或or |
或者 |
${true||false}或${true or false} |
true |
empty |
是否为空 |
${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”} |
true |
1.5、EL不显示null 当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。 2、EL表达式格式 先来了解一下EL表达式的格式!现在还不能演示它,因为需要学习了EL11个内置对象后才方便显示它。 * 操作List和数组:${list[0]}、${arr[0]}; * 操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法; * 操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。 如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作, 所以JavaBean一定要提供get方法,而set方法没有要求。 3、EL内置对象 EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。 * pageScope * requestScope * sessionScope * applicationScope * param; * paramValues; * header; * headerValues; * initParam; * cookie; * pageContext; 3.1、域相关内置对象(重点) 域内置对象一共有四个: * pageScope:${pageScope.name} 等同于 pageContext.getAttribute("name"); * requestScope:${requestScope.name} 等同于 request.getAttribute("name"); * sessionScoep: ${sessionScope.name} 等同于 session.getAttribute("name"); * applicationScope:${applicationScope.name} 等同于 application.getAttribute("name"); EL表达式来读取四大域 * ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。 * ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性! 全域查找:${xxx}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。 3.2、param 和 paramValues:请求参数相关内置对象 * param:Map<String,String>类型,param对象可以用来获取参数,与request.getParameter()方法相同。 注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。 ${param.username } * paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。 ${paramValues.hobby[0] } ${paramValues.hobby[1] } 3.3、header 和 headerValues :请求头相关内置对象 * header: Map<String,String>类型,用来获取请求头。 ${header['User-Agent']} * headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。 3.4、initParam:应用初始化参数相关内置对象 * initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。 <context-param> <param-name>yyy</param-name> <param-value>YYY</param-value> </context-param> ${initParam.yyy} 3.5、Cookie相关内置对象 * cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。 ${cookie.JSESSIONID.value }、${cookie.JSESSIONID.name } 3.6、pageContext对象 pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法, ${pageContext.request.contextPath}常用的动态获得项目路径,如:/day12_1 例如方法 pageContext.getRequest() 等同于 ${pageContext.request}。也就是读取JavaBean属性!!!
EL表达式 |
说明 |
${pageContext.request.queryString} |
pageContext.getRequest().getQueryString(); |
${pageContext.request.requestURL} |
pageContext.getRequest().getRequestURL(); |
${pageContext.request.contextPath} |
pageContext.getRequest().getContextPath(); |
${pageContext.request.method} |
pageContext.getRequest().getMethod(); |
${pageContext.request.protocol} |
pageContext.getRequest().getProtocol(); |
${pageContext.request.remoteUser} |
pageContext.getRequest().getRemoteUser(); |
${pageContext.request.remoteAddr} |
pageContext.getRequest().getRemoteAddr(); |
${pageContext.session.new} |
pageContext.getSession().isNew(); |
${pageContext.session.id} |
pageContext.getSession().getId(); |
${pageContext.servletContext.serverInfo} |
pageContext.getServletContext().getServerInfo(); |
例: AServlet: Address address = new Address(); address.setCity("北京"); address.setStreet("西三旗"); Employee emp = new Employee(); emp.setName("李小四"); emp.setSalary(123456); emp.setAddress(address); request.setAttribute("emp", emp); request.getRequestDispatcher("/day12_1/a.jsp").forward(request,response); ------------------------------------------ 页面获取: <h3>使用el获取request域的emp</h3> ${requestScope.emp.address.street } <!-- 等同于内置对象获得 request.getAttribute("emp").getAddress().getStreet() --><br/>