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"] }