您的位置:首页 > Web前端 > JavaScript

在jsp中应用EL表达式取内置对象的值

2015-09-24 17:05 393 查看
一、为何使用EL表达式?

在MVC体系结构中,JSP页面只是用来显示数据,但它不能直接对隐式对象中某对象的属性进行显示,需要配合Scriptlet才能显示数据。
如果在JSP页面中使用EL表达式将大大简化JSP页面中的Java代码,在配合JSP标准动作,JSTL,可达到真正的JSP无脚本。
二、概念

EL(Expression Language)表达式语言,语法:${表达式}。
例如:${"Hello"}则在JSP页面输出Hello,相当于JSP脚本中的<%="Hello"%>,在EL表达式中的“'”和“"”功能是一样的,表示一个字符串。

在JSP页面中我们可以禁用EL表达式,需要配置page指令的isELIgnored属性,属性值若为true则支持EL表达式,若为false则禁用表达式,默认情况下是支持EL表达式的。
三、从隐式对象中获得数据
我们知道内置对象:application、session、request、page
在el中,内置对象被封装为:applicationScope、sessionScope、requestScope、pageScope
.
是我们最常用的,作用相当于执行Bean中的get方法。

问题来了: SP和EL中 pageContext.request 和 requestScope 的区别?

回答: pageContext.request是一个具体的对象,在你的http请求过程中存在。

requestScope是一个Map,这个Map中存放了在request作用域中的属性键值对,就这么简单而已,它不是request对象,而是request对象属性的封装,pageContext.request才是真正的request对象。

EL中你可以在这个周期中放置、获取对象。(当然,其实真正的操作也是针对request对象的)。

比如${requestScope.a},其实就是要表明我告诉jsp要到requestScope这个声明周期中获取对象a。而背后的实现就是从request.getAttribute("a"),然后根据表达式得到相应的a对象。

使用:

pageScope
例如:${pageScope.user.userName}相当于<%=page.getAttribute("user").getUserName%>
requestScope
例如:${requestScope.books}
相当于<%=request.getAttribute("books")%>
sessionScope
例如:${sessionScope.lastURL}相当于<%=session.getAttribute("lastURL")%>
${sessionScope.user.userName}意思是:在会话中得到名称为user的Bean对象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性的值。

applicationScope
例如:${applicationScope.provice}相当于<%=application.getAttribute("provice")%>
或者访问JSP页面中的内置对象:

pageContext
例如:${pageContext.request}在EL表达式中我们是不能直接使用JSP页面的内置对象,但可以是用pageContext间接得到这些内置对象,再来使用。

四、从请求头获得数据

header
例如:${header.referer}得到请求过来的URL
五、EL运算

1.算术运算符
注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${'a'+'b'}则会出现异常。
例如:${6+6}
-
例如:${4-3}
*
例如:${4*3}
/
例如:${9/3}
2.关系运算符
>例如:${8>9}

>=例如:${45>=9}

<例如:${4<9}

<=例如:${9<=8}

==
例如:${4==4}
!=
例如:${4!=3}
3.逻辑运算符
&&例如:${false && false}

||
例如:${true || false}

!
例如:${!true}相当于${false}
4.三元运算符
? :
例如:${3>2?'是':'不是'}
5:在EL表达式中还有一些特殊运算符:

empty
判断EL表达式中的表达式是否为空,例如:${empty sessionScope.user}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: