EL 全名为Expression Language
EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:
${sessionScope.user.sex}
所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得
用户的性别。假若依照之前JSP Scriptlet的写法如下:
User user = (User)session.getAttribute("user");
String sex = user.getSex( );
User是一个对象,Sex是他的一个属性,所以,取对象的值:${范围.变量.属性}
两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。
其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,
例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:
String username = (String) session.getAttribute("username");容易、简洁许多.
自动转变类型
EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:
${param.count + 20}
假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:
String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);//这里需要把字符型转为整形
count = count + 20;
所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽
在 EL中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}
这里param 的功能和request.getParameter(String name)相同,而paramValues和
request.getParameterValues(String name)相同,这里取到的是字符类型的数组,针对复选框情况(一个相同的名字对应多个值)。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。
pageScope 例如:${pageScope.user.userName} 相当于<%=page.getAttribute(
"user"
).getUserName%>
requestScope 例如:${requestScope.books} 相当于<%=request.getAttribute(
"books"
)%>
sessionScope 例如:${sessionScope.lastURL} 相当于<%=session.getAttribute(
"lastURL"
)%>
applicationScope 例如:${applicationScope.provice} 相当于<%=application.getAttribute(
"provice"
)%>
看到这里,大家应该很明确EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。
pageContext
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分
${pageContext.request.queryString} --- 取得请求的参数字符串
${pageContext.request.requestURL} ------ 取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。
${pageContext.request.contextPath} -------服务的webapplication的名称
${pageContext.request.remoteAddr} --------取得用户的IP地址
注意:
之前经常看到有人说js是客房端的,EL是服务端的,不能在js中使用EL表达式----真是扯淡
要在javascript中使用El表达式,只需在el表达式两端加上单引号或者双引号即可
如:
<script>
function(){
alert(‘${sessionScope.user.name}‘); //获取session中user对象的name属性
}
</script>
也就是说只要使用$就要加单引号