EL表达式不仅仅能帮你减少JSP中Java的代码量

表达式语言的介绍

​ EL表达式:Expression Language,简称EL,我们一般称为表达式语言,或者EL表达式,在以后的学习过程中,我们还会学习到SpringEL表达式,对于JSP而言,EL表达式是在JSP2.0中添加的新的功能,使用EL表达式可以方便的获取域对象的信息,获取参数的信息,可以大量的减少JSP代码中Java的代码量,而且EL表达式的语法非常的简单:${域对象信息名称或者参数名称}。

范例:设置域对象信息,并且使用EL表达式获取
<%

​		//设置域对象的信息,一般是在Servlet(Filter 和 Listener )中完成的

​		pageContext.setAttribute("company", "阿里巴巴");

​	%>

​	<h1>[之前的写法]获取Page域对象信息:<%= pageContext.getAttribute("company") %></h1>

​	<h1>使用EL表达式:${company}</h1>

我们发现使用EL表达式之后,相比之前的在JSP中使用scriptlet的形式,简单了很多,还有特别的好处,就是减少JSP中Java的代码量,除了这个好处之外,还有如下好处:

  • 空值取代错误消息
  • 精确的访问对象的属性
  • 可以访问集合
  • 可以使用运算符
①空值取代错误消息:在没有设置域对象的情况下, 使用原来的方式可以取得null,那么肯定是存在问题的,正常来说取得的应该是一个空串,那么使用EL表达式取出的就是一个空串,代码如下:
<%

​		//设置域对象的信息,一般是在Servlet(Filter 和 Listener )中完成的

​		pageContext.setAttribute("company", "阿里巴巴");

​	%>


​	<h1>[之前的写法]获取Page域对象company信息:<%= pageContext.getAttribute("company") %></h1>

​	<h1>[之前的写法]获取Page域对象Tel信息:<%= pageContext.getAttribute("tel") %></h1> <!-- 这里获取的值为null -->


​	<h1>使用EL表达式company:${company}</h1>

​	<h1>使用EL表达式Tel:${tel}</h1> <!-- 这里取得的是空串 -->
②使用EL获取其他范围域对象信息,EL表达式不仅仅可以取得page域对象信息,其他范围的域对象信息也依然可以获取:
<%

​		pageContext.setAttribute("company", "阿里巴巴");

​		request.setAttribute("tel","15110010110");

​		session.setAttribute("address","杭州");

​		application.setAttribute("code","9527");

​	%>

​	<h1>获取page域对象:${company }</h1>

​	<h1>获取request域对象:${tel }</h1>

​	<h1>获取session域对象:${address }</h1>

​	<h1>获取application域对象:${code }</h1>
③ 不同范围相同名字的域对象信息获取,使用pageContext,request,session和application分别设置相同名称但是值不同的域对象信息,使用EL表达式获取的会是哪个域对象范围的信息呢?
<%

​		pageContext.setAttribute("company", "阿里巴巴");

​		request.setAttribute("company","13515967537");

​		session.setAttribute("company","杭州");

​		application.setAttribute("company","9527");

​	%>

​	<h1>获取域对象:${company }</h1>

程序运行结果发现,获取的域对象的信息时page范围的,实际上我们知道以上的四个域对象的范围从小到大依次是:page,request,session,application,那么EL表达式获取的是从小到大。

④ 设置了不同范围相同名称的域对象信息,EL表达式获取的结果是从小到大,但是如果非要获取大的范围,而非小的范围,如何处理呢?我们这个时候必须使用隐式对象,所谓隐式对象,指的是page,request,session,application这种的显示对象的影子,通过隐式对象获取具体的范围的域对象信息,隐式对象有四个,分别对应四种域对象范围:
  • page ---->pageScope
  • request---->requestScope
  • session---->sessionScope
  • application—>applicationScope

使用范例:

<%

​		pageContext.setAttribute("company", "阿里巴巴");

​		request.setAttribute("company","11555112255");

​		session.setAttribute("company","杭州");

​		application.setAttribute("company","9527");

​	%>

​	<!-- 获取指定范围域对象信息 -->

​	<h1>获取application域对象:${applicationScope.company }</h1>

​	<h1>获取session域对象:${sessionScope.company }</h1>

猜你喜欢

转载自blog.csdn.net/codeliang20/article/details/106482018
今日推荐