1,何为表达式语言(Expression Language,EL)?
EL是JSP 2.0中新增的功能,使用EL可以方便的访问标志位(JSP中一共有page[pageContext],request,session和application4种标志位)中的属性内容,这样可以减少页面中的脚本代码;
2,EL的格式:${属性名称}
使用表达式语言可以方便地访问对象中的属性,提交的参数或者是进行数学运算,当内容为空时,则会自动输出空字符串("")表示;
看一个最简单的例子:
没有El之前我们应该这么写:
<% request.setAttribute("name","keith"); if(request.getAttribute("name")!= null){ %> <%=request.getAttribute("name")%> <%} %>
有了EL,我们这么写:
<% request.setAttribute("name","keith"); %> ${name }
这样页面会简介很多,维护也很方便;
3,表达式语言(EL)的内置对象:
EL的主要功能就是进行内容的显示,为了显示方便,在EL中提供了很多内置对象,通过对不同内置对象的设置,EL可以输出不同的内容,这些内置对象如下:
No | EL内置对象 | 说明 |
1 | pageContext | 表示javax.servlet.jsp.PageContext对象 |
2 | pageScope | 表示从page属性范围查找输出属性 |
3 | requestScope | 表示从request属性范围查找输出属性 |
4 | sessionScope | 表示从session属性范围查找输出属性 |
5 | applicationScope | 表示从application属性范围查找输出属性 |
6 | param | 接收传递到本页面的参数 |
7 | paramValues | 接收传递到本页面的一组参数 |
8 | header | 取得一个头信息数据 |
9 | headerValues | 取得一组头信息数据 |
10 | cookie | 取出cookie中的数据 |
11 | initParam | 取得配置的初始化参数 |
4,访问4中属性范围的内容:
EL语言可以输出4中属性范围中的内容,如果此时在不同的属性范围中设置了同一个属性名称,则按照:page-->request-->session-->application顺序查找:
<% pageContext.setAttribute("info","page 属性范围"); request.setAttribute("info","request 属性范围"); session.setAttribute("info","session 属性范围"); application.setAttribute("info","application 属性范围"); %> ${info }
输出的是:page 属性范围
这时可以指定一个要取出范围的属性,范围一共有4种标记:
No | 属性范围 | 范例 | 说明 |
1 | pageScope | ${pageScope.属性} | 取出page范围的属性内容 |
2 | requestScope | ${requestScope.属性} | 取出requestScope范围的属性内容 |
3 | sessionScope | ${sessionScope.属性} | 取出sessionScope范围的属性内容 |
4 | applicationScope | ${applicationScope.属性} | 取出applicationScope范围的属性内容 |
则上面的例子可以这么写:
<% pageContext.setAttribute("info","page 属性范围"); request.setAttribute("info","request 属性范围"); session.setAttribute("info","session 属性范围"); application.setAttribute("info","application 属性范围"); %> page 属性范围: ${pageContext.info } request 属性范围: ${requestScope.info } session 属性范围: ${sessionScope.info } application 属性范围: ${applicationScope.info }
5,调用内置对象操作:
在JSP内置对象里,可以使用pageContext()取得request,session,application的实例,在EL中可以通过pageContext这个表达式的内置对象调用JSP内置对象中提供的方法(调用方法是通过反射机制完成的);
IP地址:${pageContext.request.remoteAddr }<br /> session ID:${pageContext.session.id }<br /> 是否新的session:${pageContext.session.new }
6,接收请求参数:
使用EL还可以显示接收的请求参数,功能与request.getParameter()类似,语法:接收参数:${param.参数名称} ;
页面:
通过内置对象接收输入参数:<%=request.getParameter("info") %> 通过EL语言接收输入参数:${param.info }
在浏览器上输入:http://localhost:8080/jsp/elTest.jsp?info='keith'
下面传入一组参数,语法:接收参数:${paramValues.参数名称} ;
<form action="paramValuesDemo.jsp" method="post"> 爱好:<input type="checkbox" name="inst" value="唱歌">唱歌 <input type="checkbox" name="inst" value="游泳">游泳 <input type="checkbox" name="inst" value="看书">看书 <input type="submit" value="显示"> </form>
paramValuesDemo.jsp:(上面接收的一组参数,如果想要取出,则需要分别指定下标; )
<%request.setCharacterEncoding("UTF-8");%> 第一个参数:${paramValues.inst[0] }<br /> 第二个参数:${paramValues.inst[1] }<br /> 第三个参数:${paramValues.inst[2] }<br />
7,集合操作:
在EL语言中已经很好地支持了集合的操作,可以方便的使用EL输出Collection(子接口:List,Set),Map集合中的内容。
看下List集合:
<% //实例化List接口 List all = new ArrayList(); //向集合中增加内容 all.add("keith"); all.add("学习JAVA!"); //向request集合中保存 request.setAttribute("allInfo",all); %> 第一个元素:${allInfo[0] } 第二个元素:${allInfo[1] } 第三个元素:${allInfo[2] }
看下Map集合:
<% Map map = new HashMap(); map.put("name","keith"); map.put("age","21"); request.setAttribute("info",map); %> Name:${info["name"] } Name:${info["age"] }