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

一、为何使用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}




猜你喜欢

转载自blog.csdn.net/u013938465/article/details/48713619
今日推荐