EL基本用法
概述EL是在web前端经常会用到的技术,EL经常和JSTL一起使用,但是EL又可以单独使用,全称是Expression Language,它原本是JSTL 1.0为方便存取数据所定义的语言,是一种新的语言,有它自己的语法,只要支持Servlet2.4或者JSP2.0的容器,都可以在JSP网页中直接使用EL,不需导入任何其他的包。优势在JSP中,经常会打印一些变量的内容,这些变量可以是从
概述
EL是在web前端经常会用到的技术,EL经常和JSTL一起使用,但是EL又可以单独使用,全称是Expression Language,它原本是JSTL 1.0为方便存取数据所定义的语言,是一种新的语言,有它自己的语法,只要支持Servlet2.4或者JSP2.0的容器,都可以在JSP网页中直接使用EL,不需导入任何其他的包。
优势
在JSP中,经常会打印一些变量的内容,这些变量可以是从某个范围中变量,比如page、request、session、application范围。例,打印str变量,下面三种方法都可以:
<%out.println(str)%>,这样会使JSP页面里面包含JAVA代码;
<%=str%>只能从本地获得,如果要从session里面获取必须是<%=session.getAttribute()%>;
${str}则可以从request、session、application范围中获得。
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.jsp、PageB.jsp
PageA.jsp
PageB.jsp
运行页面,在PageB.jsp显示如下
application中的内容:Welcome Application!
session中的内容:Welcome Session!
request中的内容:
因为PageA.jsp到PageB.jsp是使用连接,地址栏上的地址也发生了改变,所以是一个从定向跳转,此时request中内容丢失了,所以request中的内容没有显示,如果使用forward跳转,request中的内容将不会丢失。
上面使用了EL表达式来获取各种范围中的数据内容。使用的方式是${applicationScope.msgA},也可以省略Scope部分,直接写成${msgA},省略方式写成${msgA},系统会自动去application、session、request、page四种范围寻找msgA,所以这种省略的写法只能用在pageScope、requestScope、sessionScope、applicationScope四种范围内。其他不能省略,例如不能把${param.A}省略成${A}。
假如applicationScope和sessonScope中都有msg呢,用省略的方式${msgA}得到的是什么呢?
${msg}将得到的是结果是:Welcome Session!
因为系统自动寻找的步骤是:pageScope、requestScope、sessionScope、applicationScope,所以先找到session中的msg信息。
上面的例子中放入session等范围的都是一些简单的数据,当然也可以放入复制的数据,例如javabean、集合等。
创建Customer.java的javabean
在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中得到A和B的值的代码如下
运行结果如下
参数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
更多推荐
所有评论(0)