当前位置 : 主页 > 编程语言 > java >

jsp(7)EL表达式

来源:互联网 收集:自由互联 发布时间:2021-06-25
前提: 如果Tomcat服务器不能使用EL表达式 (1)升级成tomcat6 (2)在JSP中加入%@ page isELIgnored="false" % 引例 :当我们用户登陆成功的时候,seesion就成功建立起来,我们就能这样写一个欢迎

前提:如果Tomcat服务器不能使用EL表达式

        (1)升级成tomcat6

(2)在JSP中加入<%@ page isELIgnored="false" %>


引例:当我们用户登陆成功的时候,seesion就成功建立起来,我们就能这样写一个欢迎界面:

欢迎你!<%=((User)session.getAttribute("user")).getUsername()%>

然而!不觉得这样写java代码太多了吗?所以可以引用EL表达式:

欢迎你!${user.username}    也可以写成${user[“username”]}

达到简化代码的效果。在这里user.username自动对应的是user.getUsername()。

所以EL表达式也不是万能的,在这也能看出EL表达式的缺点:想要取到的属性值,必须要有相应的get方法!



EL中的隐含对象,即默认取值的对象,例如下面的与范围有关的隐含对象。

示例:${ username }

表示:取出某一范围中名称为username的属性变量。

解释:首先在page中找,即${ username }实际上是${pageScope.username},如果当前page中没有这个属性,那么就越到下一级request,此时${ username }实际上是${requestScope.username}...以此类推。


注意:上述取得是“属性”,而非“参数”。隐含对象只能用来取得范围属性值,即JSP中的getAttribute(String name),例如response是不能使用EL表达式的,因为他没有getAttribute()——得到属性的方法。取参数是在request中取的(request也能取属性)。所以我们可以使用

${param.count + 20}

代替下面的代码,实现request中保存的某个int类型参数做加法,操作request中的参数

String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
count = count + 20;


提到EL表达式中的运算,我首先放个demo:

1.${17 / 5}	<br>
2.${17 mod 3} <br>
<%
int i=1;
String num="34";
request.setAttribute("i",num);
%>
3.${i+num} <br>
4.${i} <br>
5.${num} <br>
6.${i+1} <br>
7.${0/20}<br>
8.${20/0}<br>
9.${0/0}<br>

输出是:

1.3.4

2.2 

3.34
4.34
5.
6.35
7.0.0
8.Infinity

9.NaN

其中2的mod代表取余,我们也可以直接用%代替mod,mod等价于%,是%的别名。相应的/的别名是div

3就令人费解了,怎么得到的是34,不是134呢?

我们先看4——${i},这个和前面的${username}一样,代表取属性,默认先取的page中的属性i,如果没有又去找request中的....我们看到当前page中是没有这个属性的,往request中找,有,并且这个属性变量i的值是34,所以${i}就输出了34。

同理5中的${num},既不存在于page,也不存在于request中,session,aplication中也没有,所以取到的是空值(这就是el的好处之一:遇到空值不会报异常也不会变成null值

所以回过头看3,${i+num},就是4,5的相加。注意:EL表达式中的“+”不做字符串的拼接。算术符中做的是运算操作。




如果问我们:判断password1==password2用EL怎么做:

${param.password1} = = ${param.password2}    (错,这个直接输出两者相等,而没有进行关系比较)
${ ${param.password1 }==${ param.password2 } } (错,EL表达式就是为了简化代码设计的,不需要相互嵌套完成操作)

${ param.password1 = = param.password2 }  (对)


最后再说一下保留字,所谓保留字的意思是指变量在命名时,应该避开的名字,以免程序编译时发生错误

网友评论