天富娱乐登录体育真人
EL是Expression Language的缩写,它是jsp内置的表达式语言,从jsp2.0开始,就不让再使用java脚本,而是使用el表达式或动态标签来代替java脚本。EL表达式的格式如下:
$
EL表达式代替的是java脚本中的<%= …%>,也就是说EL表达式也是向浏览器端输出数据。例如${1+2}会向浏览器端输出3。
天富娱乐登录老虎机
天富娱乐注册
通过对EL表达式的初步了解,下面我们通过练习来掌握EL表达式的使用,点击此处
下载案例源代码,如下所示:
(1)创建一个web应用,Example6,对该应用的index.jsp页面进行编辑,如例1-1所示:
例1-1 index.jsp
<body> This is my JSP page. <br> <% request.setAttribute("request_attribute", "request_haha"); %> ${request_attribute } </body> |
例1-1中,首先向request域中存放名字为“request_attribute“的域属性,值为”request_haha“,然后使用EL表达式将request_attribute从request域中取出,输出在浏览器端。
(2)将Example6发布到服务器端,然后启动服务器,在浏览器端访问index.jsp页面,浏览器显示结果如图1-1所示:
图1-1 浏览器显示结果
由图1-1可知,使用EL表达式成功的从request域中取出了数据。
(3)再次修改index.jsp页面,如例1-2所示:
例1-2 index.jsp
<body> This is my JSP page. <br> <% pageContext.setAttribute("attribute", "pageContext_haha"); session.setAttribute("attribute", "session_haha"); application.setAttribute("attribute", "application_haha"); request.setAttribute("attribute", "request_haha"); %> ${attribute } </body> |
例1-2中,在jsp的四大域中都存放了名字为“attribute“的与属性,但值各不相同。现在使用EL表达式向浏览器端输出attribute的值,那么浏览器端会输出哪个域的属性值?
(4)再次在浏览器端访问index.jsp页面,浏览器显示结果如图1-2所示:
图1-2 浏览器显示结果
由图1-2可知,${attribute}表达式是从pageContext域中取数据。
(5)将index.jsp页面中的向pageContext域中存放数据的代码注释掉,然后再在浏览器端访问index.jsp,浏览器显示结果如图1-3所示:
图1-3 浏览器显示结果
由图1-3可知,el表达式是从request域中取出的数据。现在再将向request域中存放数据的代码注释掉,再次在浏览器端访问index.jsp页面,浏览器显示结果如图1-4所示:
图1-4 浏览器显示结果
图1-4中,el表达式取出的是session域中的属性值,如果再将向session域存放数据的代码注释掉,再次访问index.jsp页面,浏览器端输出的仍然是“session_haha“,这是因为session对象还存在,那么它当中的域属性自然也就存在,将浏览器关闭,再打开然后再访问index.jsp,浏览器端的输出结果如图1-5所示:
图1-5 浏览器显示结果
通过以上对jsp四大域的操作,可以发现使用EL表达式获取数据是依次从jsp的四大域中获取,即全域查找,次序是page域,request域,session域最后是application域,如果page域中存在,就返回并结束查找,如果没有,就去request域中查找,找到就返回并结束查找,如果request域中也没有,那么就继续去session域中查找,以此类推,最后查找到application域。如果这四个域中都没有,那么EL表达式就返回一个空字符串,即在页面上什么也不显示,如图1-6所示:
图1-6 浏览器显示结果
天富娱乐注册最新网址
在2.1小节中,我们学习了使用EL表达式进行全域查找,但是进行全域查找必然会影响效率,因此现在我们来学习使用EL表达式从指定域中获取数据,具体如下:
(1)再次对index.jsp页面进行修改,如例1-3所示:
<body> This is my JSP page. <br> <% request.setAttribute("attribute", "request_haha"); pageContext.setAttribute("attribute", "pageContext_haha"); session.setAttribute("attribute", "session_haha"); application.setAttribute("attribute", "application_haha"); %> <p>全域查找:${attribute }</p> <p>从page域中查找:${pageScope.attribute }</p> <p>从request域中查找:${requestScope.attribute }</p> <p>从session域中查找: ${sessionScope.attribute }</p> <p>从application域中查找:${applicationScope.attribute }</p> </body> |
例1-3中,如果要指定从哪个域中获取数据,一定要在指定的域名称后面加上“Scope“,否则不能从指定的域中获取数据。
(2)在浏览器端访问index.jsp,浏览器显示结果如图1-7所示:
图1-7 浏览器显示结果
其实,使用EL表达式获取jsp四个域中的数据:
- pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);
- requestScope:${requestScope.name}等同与request.getAttribute(“name”);
- sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”);
- applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);
天富娱乐注册官网平台
如果在域中保存的是javaBean对象,那么也可以使用EL表达式来访问javaBean的属性,因为EL表达式只做读操作,所以javaBean一定要为属性提供get方法,而对set方法没有要求。使用EL表达式获取javaBean属性就是javaBean导航。
下面通过一个案例来了解EL表达式是如何进行JavaBean导航的,如下所示:
(1)在Example6应用中,新建一个javaBean类,Address,主要代码如例1-4所示:
例1-4 Address.java
public class Address { private String city; private String street; 此处省略Address类的成员变量的get/set方法 @Override public String toString() { return "Address [city=" + city + ", street=" + street + "]"; } } |
(2)在Example6应用中,再次新建一个javaBean类,Employee,主要代码如例1-5所示:
例1-5 Employee.java
public class Employee { private String name; private double salary; private Address address; 此处省略Employee类的成员变量的get/set方法 @Override public String toString() { return "Employee [name=" + name + ", salary=" + salary + ", address=" + address + "]"; } } |
(3)在Example6下的WebRoot目录下新建一个目录el,然后在该目录下新建一个el.jsp文件,主要代码如例1-6所示:
例1-6 el.jsp
<%@ page import="cn.itcast.domain.*" %><!—由于在跟页面中需要使用Address,Employee类,所以这里需要将它们导入--> <body> <% Address address = new Address(); address.setCity("北京"); address.setStreet("西三旗"); Employee emp = new Employee(); emp.setName("李小四"); emp.setSalary(123456); emp.setAddress(address); request.setAttribute("emp", emp); %> <h3>使用el获取request域的emp</h3> ${requestScope.emp }<br/> </body> |
例1-6中,创建了Address和Employee的对象,并将属性赋值,其中address对象是emp对象的一个属性,然后将emp对象保存在request域中,再使用el表达式获取emp对象。
(4)重新启动服务器,在浏览器端访问el.jsp页面,浏览器显示结果如图1-8所示:
图1-8 浏览器显示结果
现在想获取该emp对象的address属性的street属性,el表达式该如何写?
(5)对el.jsp页面稍作修改,如例1-7所示:
... ... <h3>使用el获取request域的emp对象的address属性的street属性</h3> ${requestScope.emp.address.street} ... ... |
(6)再次访问el.jsp页面,浏览器显示结果如图1-9所示:
图1-9 浏览器显示结果
由图1-9可知,使用例1-7所示的el表达式成功的获取到street属性的值,例1-7中的el表达式就是javaBean导航,其底层代码如下:
Employee _emp=(Employee)request.getAttribute("emp");
String street=_emp.getAddress().getStreet();
因此我们在前面特意强调,如果域中存放的是javaBean对象,javaBean一定要为每个属性提供get方法,因为在使用el表达式获取javaBen属性时,底层就是调用属性的get方法。
(7)在Employee类中添加一个get方法,如例1-8所示:
例1-8 getHehe()方法
此处省略例1-5中的代码 public String getHehe() { return "我去..."; } |
(8)在el.jsp页面中使用el表达式输出该方法的返回值,如例1-9所示:
此处省略例1-6中的代码 ${emp.hehe } |
(9)重新启动服务器,访问index.jsp页面,浏览器显示结果如图1-10所示:
图1-10 浏览器显示结果
由图1-10可知,Employee类中虽然没有名称为”hehe”的成员变量,但是提供了get方法,因此hehe就是Employee的属性,那么在jsp页面中就能通过el表达式${emp.hehe}输出该方法的返回值,进一步说明该el表达式底层就是调用javaBean的get方法。
天富娱乐注册
EL是表达式语言,它可以进行一些运算,可使用的运算符如表1-1所示:
表1-1 EL表达式运算符
运算符 | 说明 | 范例 | 结果 |
+ | 加 | ${17+5} | 22 |
- | 减 | ${17-5} | 12 |
* | 乘 | ${17*5} | 85 |
/或div | 除 | ${17/5}或${17 div 5} | 3 |
%或mod | 取余 | ${17%5}或${17 mod 5} | 2 |
==或eq | 等于 | ${5==5}或${5 eq 5} | true |
!=或ne | 不等于 | ${5!=5}或${5 ne 5} | false |
<或lt | 小于 | ${3<5}或${3 lt 5} | true |
>或gt | 大于 | ${3>5}或${3 gt 5} | false |
<=或le | 小于等于 | ${3<=5}或${3 le 5} | true |
>=或ge | 大于等于 | ${3>=5}或${3 ge 5} | false |
&&或and | 并且 | ${true&&false}或${true and false} | false |
!或not | 非 | ${!true}或${not true} | false |
||或or | 或者 | ${true||false}或${true or false} | true |
empty | 是否为空 | ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”} | true |
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢! 作者:传智播客Java培训学院 首发:http://tianfu2024.sbs/javaee