EL基本用法
2010-03-31 16:26
162 查看
概述
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
[b][b][/b][/b]
[b][b][/b][/b]
[b][b][/b][/b]
运行页面,在PageB.jsp显示如下
[b][b][/b][/b][b][/b]
[b][/b]
[b][/b]
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}得到的是什么呢?
因为系统自动寻找的步骤是:pageScope、requestScope、sessionScope、applicationScope,所以先找到session中的msg信息。
上面的例子中放入session等范围的都是一些简单的数据,当然也可以放入复制的数据,例如javabean、集合等。
创建Customer.java的javabean
customer的值为:000, 000
更加复制的情况,在PageA.jsp中加入如下代码
第一个:111,
111
第二个:222, 222
第三个:333, 333
获取param中的值
使用param,就是使用url传递过来的参数,例如在PageA.jsp中的连接使用如下
参数A的值是:1
参数B的值是:2
获取cookie中的值
在PageA.jsp中添加如下代码
cookie
username的值是:skycloud
如果直接使用${cookie.username}将得到一个对象,运行结果如下
cookie username的值是:javax.servlet.http.Cookie@2cc2d4
获取initParam的值
有些时候需要在web.xml中进行一些初始化的工作,例如在web.xml做如下初始化
初始化参数encoding是:gb2312
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
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'PageA.jsp' starting page</title> </head> <body> <% application.setAttribute("msgA", "Welcome Application!");//在application内放一些内容 session.setAttribute("msgS", "Welcome Session!");//在session内放一些内容 request.setAttribute("msgR", "Welcome Request!");//在request内放一些内容 %> <a href="PageB.jsp" mce_href="PageB.jsp">进入PageB页面</a> </body> </html>PageB.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'PageB.jsp' starting page</title> </head> <body> application中的内容:${applicationScope.msgA }<br/> session中的内容:${sessionScope.msgS }<br/> request中的内容:${request.msgR }<br/> </body> </html>[b][b][/b][/b]
[b][b][/b][/b]
[b][b][/b][/b]
[b][b][/b][/b]
运行页面,在PageB.jsp显示如下
[b][b][/b][/b][b][/b]
[b][/b]
[b][/b]
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}得到的是什么呢?
application.setAttribute("msg", "Welcome Application!"); session.setAttribute("msg", "Welcome Session!");${msg}将得到的是结果是:Welcome Session!
因为系统自动寻找的步骤是:pageScope、requestScope、sessionScope、applicationScope,所以先找到session中的msg信息。
上面的例子中放入session等范围的都是一些简单的数据,当然也可以放入复制的数据,例如javabean、集合等。
创建Customer.java的javabean
package po; public class Customer { private String account; private String password; public Customer() { } public Customer(String account, String password) { this.account = account; this.password = password; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }在PageA.jsp中生成该javabean
Customer cus = new Customer("000", "000"); session.setAttribute("cus", cus);在PageB.jsp中打印该Customer javabean的值,添加如下代码。
customer的值为:${cus.account }, ${cus.password }运行结果如下
customer的值为:000, 000
更加复制的情况,在PageA.jsp中加入如下代码
ArrayList cuses = new ArrayList(); cuses.add(new Customer("111", "111")); cuses.add(new Customer("222", "222")); cuses.add(new Customer("333", "333")); session.setAttribute("customers", cuses);在PageB.jsp中打印customer信息,添加代码如下
所有的customer如下<br/> 第一个:${customers[0].account }, ${customers[0].password }<br/> 第二个:${customers[1].account }, ${customers[1].password }<br/> 第三个:${customers[2].account }, ${customers[2].password }<br/>运行结果如下
第一个:111,
111
第二个:222, 222
第三个:333, 333
获取param中的值
使用param,就是使用url传递过来的参数,例如在PageA.jsp中的连接使用如下
<a href="PageB.jsp?A=1&B=2" mce_href="PageB.jsp?A=1&B=2">进入PageB页面</a>在PageB.jsp中得到A和B的值的代码如下
参数A的值是:${param.A }<br/> 参数B的值是:${param.B }<br/>运行结果如下
参数A的值是:1
参数B的值是:2
获取cookie中的值
在PageA.jsp中添加如下代码
response.addCookie(new Cookie("username", "skycloud"));在PageB.jsp中获取cookie的值,代码如下
cookie username的值是:${cookie.username.value }运行结果如下
cookie
username的值是:skycloud
如果直接使用${cookie.username}将得到一个对象,运行结果如下
cookie username的值是:javax.servlet.http.Cookie@2cc2d4
获取initParam的值
有些时候需要在web.xml中进行一些初始化的工作,例如在web.xml做如下初始化
<context-param> <param-name>encoding</param-name> <param-value>gb2312</param-value> </context-param>如果要在PageB.jsp中获取这个初始化参数,在PageB.jsp中添加如下代码
初始化参数encoding是:${initParam.encoding }运行结果如下
初始化参数encoding是:gb2312
相关文章推荐
- EL表达式的基本用法
- el 表达式的基本用法
- EL表达式的基本用法
- EL表达式的基本用法
- OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例及 EL的基本用法
- EL表达式的基本用法
- Angular4 中内置指令的基本用法
- Jquery-zTree的基本用法
- Jquery-zTree的基本用法
- markdown编辑器基本用法
- Canvas基本用法
- tabhost基本用法(一)
- AngularJS服务基本用法
- Thread类的基本用法1
- 【Objective-C】OC中协议(Protocol)的基本概念和用法
- AfxBeginThread的基本用法
- Android基础:shape的基本用法
- Beanutils基本用法
- gdb基本用法
- HTTP1.1请求和响应的基本用法