概述

EL是在web前端经常会用到的技术,EL经常和JSTL一起使用,但是EL又可以单独使用,全称是Expression Language,它原本是JSTL 1.0为方便存取数据所定义的语言,是一种新的语言,有它自己的语法,只要支持Servlet2.4或者JSP2.0的容器,都可以在JSP网页中直接使用EL,不需导入任何其他的包。

优势

JSP中,经常会打印一些变量的内容,这些变量可以是从某个范围中变量,比如pagerequestsessionapplication范围。例,打印str变量,下面三种方法都可以:

<%out.println(str)%>,这样会使JSP页面里面包含JAVA代码;

<%=str%>只能从本地获得,如果要从session里面获取必须是<%=session.getAttribute()%>

${str}则可以从requestsessionapplication范围中获得。

EL语法

EL的语法很简单,最大的特点就是使用上很方便。所有的EL都是以 ${ 为起始、以 } 为结尾的。

例如:${sessionScope.user.sex},表示从session的范围中,取得用户的性别。如果使用JSP Scriptlet的写法如下:

User user = (User)session.getAttribute(“user”);

String sex = user.getSex();

out.print(“sex”);

使用这种方法就会使JSP中包含JAVA代码,而且很麻烦。

EL提供 . [ ] 两种运算符来存取数据。下面两种所代表的意思是一样的。

${sessionScope.user.sex}等于${sessionScope.user[“sex”]}

但是使用 [ ] 的范围更广,因为 [ ] 中还可以是变量,比如:

String str = “sex”;

${sessionScope.user[str]}

. [ ] 的混合使用,获取集合中元素的值,例如:

${sessionScope.shoppingCart[0].price}表示结果为shoppingCart中第一项物品的价格。

几个重要的EL隐含对象

pageScope,取得page范围的属性名称所对应的值。

requestScope,取得request范围的属性名称所对应的值。

sessionScope,取得session范围的属性名称所对应的值。

applicationScope,取得application范围的属性名称所对应的值。

param,如同ServletReqest.getParameter(String name)

cookie,如同HttpServletRequest.getCookie()

initParam,如同ServletContext.getInitParameter(String name)

获取request、session、application中的值 

新建项目ELPro,新建页面PageA.jspPageB.jsp

PageA.jsp

 PageB.jsp

 

运行页面,在PageB.jsp显示如下


application中的内容:Welcome Application!

session中的内容:Welcome Session!

request中的内容:

因为PageA.jspPageB.jsp是使用连接,地址栏上的地址也发生了改变,所以是一个从定向跳转,此时request中内容丢失了,所以request中的内容没有显示,如果使用forward跳转,request中的内容将不会丢失。

上面使用了EL表达式来获取各种范围中的数据内容。使用的方式是${applicationScope.msgA},也可以省略Scope部分,直接写成${msgA},省略方式写成${msgA},系统会自动去applicationsessionrequestpage四种范围寻找msgA,所以这种省略的写法只能用在pageScoperequestScopesessionScopeapplicationScope四种范围内。其他不能省略,例如不能把${param.A}省略成${A}

假如applicationScopesessonScope中都有msg呢,用省略的方式${msgA}得到的是什么呢?

 ${msg}将得到的是结果是:Welcome Session!

因为系统自动寻找的步骤是:pageScoperequestScopesessionScopeapplicationScope,所以先找到session中的msg信息。

上面的例子中放入session等范围的都是一些简单的数据,当然也可以放入复制的数据,例如javabean、集合等。

创建Customer.javajavabean

 在PageA.jsp中生成该javabean

 在PageB.jsp中打印该Customer javabean的值,添加如下代码。

 运行结果如下

customer的值为:000, 000

更加复制的情况,在PageA.jsp中加入如下代码

 在PageB.jsp中打印customer信息,添加代码如下

 运行结果如下

第一个:111, 111
第二个:222, 222
第三个:333, 333

获取param中的值 

使用param,就是使用url传递过来的参数,例如在PageA.jsp中的连接使用如下

 在PageB.jsp中得到AB的值的代码如下

 运行结果如下

参数A的值是:1
参数B的值是:2

获取cookie中的值

PageA.jsp中添加如下代码

 在PageB.jsp中获取cookie的值,代码如下

 运行结果如下

cookie username的值是:skycloud

如果直接使用${cookie.username}将得到一个对象,运行结果如下

cookie username的值是:javax.servlet.http.Cookie@2cc2d4

获取initParam的值

有些时候需要在web.xml中进行一些初始化的工作,例如在web.xml做如下初始化

 如果要在PageB.jsp中获取这个初始化参数,在PageB.jsp中添加如下代码

 运行结果如下

初始化参数encoding是:gb2312

 

 

 

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐