el表达式的主要作用是代替jsp页面上的<%= %>,也就是说,el表达式主要作用是向浏览器输出数据,例如${1+2} 会浏览器输出3.
EL主要作用:
- 获取数据(主要是域中数据)
- 执行运算
- 获取web常用对象
- 调用java方法(EL函数)
El获取web常用对象
主要是通过el内置对象来操作,它一共有11个内置对象
- pageScope
- requestScope
- sessionScope
- applicationScope
以下两个可以用于获取请求参数:
- param:获取一个Map<String,String> key就是请求参数名称,value是值
- paramValues:获取一个Map<String,String[]>它与request.getParameterMap()结果一样。
获取http请求头信息:
- header:获取一个Map<String,String>它封装的是所有的http请求头信息
- headerValues:获取一个Map<String,String[]>它封装的是所有的http请求头信息
获取全局初始化参数:
- initParam: 获取一个Map<String,String>它封装了所有的全局初始化参数
获取cookie对象:
- cookie:获取一个Map<String,Cookie> 它封装了所有的http请求的中cookie信息,key就是cookie的名称,value就是这个cookie对象。
pageContext对象:
- pageContext 它与jsp页面上内置对象pageContext一样。
我们在el中使用pageContext一般使用:
${pageContext.request.contextPath}
El表达式获取域中数据
- page域----------------------${pageScope.name} //name是对应数据的name
- request域----------------------${requestScope.name}
- session域----------------------${sessionScope.name}
- application域----------------------${applicationScope.name}
使用el表达式获取时,如果没有查找到结果,返回的不是null,而是一个””空字符串.
el表达式获取域中复杂数据:List 和 Map 集合对象,自定义对象。
<%@page import="online.msym.bean.User"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> EL获取域中复杂数据 <hr> <% //定义一个数组 String[] st = { "aa", "bb", "cc" }; request.setAttribute("st", st); %> 获取request域中st数组第二个值: <br> jsp:<%=((String[]) request.getAttribute("st"))[1]%><br> el:${requestScope.st[1]} <hr> <% //定义一个集合List List<String> list = new ArrayList<String>(); list.add("111"); list.add("222"); list.add("333"); request.setAttribute("list", list); %> 获取request域中list集合中第二个值: <br> jsp:<%=((List<String>) request.getAttribute("list")).get(1)%> <br> el:${requestScope.list[1]} <hr> <% //定义一个Map集合 Map<String, String> map = new HashMap<String, String>(); map.put("one", "aaa"); map.put("two", "bbb"); request.setAttribute("map", map); %> 获取request域中map集合key=two的value值 <br> jsp:<%=((Map<String, String>) request.getAttribute("map")) .get("two")%> <br> el:${requestScope.map.two } <hr> <% //向request中存储一个javaBean User user = new User(); user.setUsername("tom"); user.setPassword("123"); request.setAttribute("user", user); %> 获取requst域中user对象的username属性值 <br> jsp:<%=((User) request.getAttribute("user")).getUsername()%><br> el:${requestScope.user.username} <br> <hr> 在el中使用"."与[]可以实现同样的效果: <br> ${user["username"]} <br> ${user.username} <br> 问题:.与[]有什么区别? <br> 注意:如果名称中不包含特殊符号,那么.与[]一样,但是如果名称中包含了特殊符号,那么我们就只能使用[] <br> <% request.setAttribute("login.msg", "用户名或密码错误"); %> <br> ${requestScope.login.msg } //这里不会打印出内容,因为获取的是空字符串”” <br> ${requestScope["login.msg"] } //这里会打印出:用户名或密码错误 <hr> 关于[]中名称如果不使用引号引起有什么问题? <br> <% request.setAttribute("username", "fox"); request.setAttribute("fox", "这是一个好人"); %> <br> ${requestScope["username"]}<br> //这里会打印:fox ${requestScope[username]} //这里会打印:这是一个好人 </body> </html>
El表达式使用时注意事项:
EL表达式是在jsp2.0规范中的一门技术,要想使用el表达式必须使用支持jsp2.0技术的web服务器(tomcat6以上)
Jsp2.0对应的servlet版本是servlet2.4 对应 javaEE1.4.
我现在使用的servlet版本是servlet2.5 javaEE5.0
如果在程序中发现el不可以使用:
- tomcat是否版本有问题,使用tomcat6以上;
- 在jsp页面上是否设置了isELIgnored="true"。